Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpHsPt 243 of 280 menu
◀ ▶

Именованный кусок пути в 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. Скажите, совпадет ли маршрут с таким запросом.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить