Именованный кусок пути в Go
Кусок пути берут по имени из шаблона маршрута. В фигурных скобках задают метку, а после совпадения читают соответствующий фрагмент из запроса командой у объекта запроса.
Шаблон /user/{id} означает: после
префикса /user/ в ответ попадет
остаток сегмента до следующего слэша.
Имя id связывают с этим сегментом
при регистрации маршрута.
Вернем идентификатор пользователя текстом в ответе:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("GET /user/{id}", func(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id")
fmt.Fprintf(w, "user %s", id)
})
if err := http.ListenAndServe("127.0.0.1:8080", mux); err != nil {
log.Fatal(err)
}
}
При обращении к /user/ann в ответе
user ann. Другой сегмент подставится
так же, пока шаблон совпадает.
Два имени в одном шаблоне разделяют слэшем, каждое читают отдельно:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("GET /shop/{city}/{item}", func(w http.ResponseWriter, r *http.Request) {
city := r.PathValue("city")
item := r.PathValue("item")
fmt.Fprintf(w, "%s in %s", item, city)
})
if err := http.ListenAndServe("127.0.0.1:8080", mux); err != nil {
log.Fatal(err)
}
}
Дан шаблон GET /book/{title}.
Напишите полный main.go, который
вернет в ответе текст book go
при пути /book/go.
Дан следующий код:
mux.HandleFunc("GET /user/{id}", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, r.PathValue("id"))
})
Скажите, что окажется в ответе при пути
/user/42.
Дан шаблон GET /user/{id} и путь
/user/ann/extra. Скажите, совпадет
ли маршрут с таким запросом.