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

Параметры адреса запроса в Go

Параметры после знака вопроса не входят в путь маршрута: их читают из разобранного адреса запроса. Карта значений дает строку по имени ключа; отсутствующий ключ дает пустую строку, а не ошибку.

Имя и значение в адресе разделяют знаком равенства, пары перечисляют через амперсанд. Клиент из раздела про HTTP уже собирал такие хвосты; здесь сервер только читает готовый запрос.

Вернем значение параметра q текстом:

package main import ( "fmt" "log" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("GET /search", func(w http.ResponseWriter, r *http.Request) { q := r.URL.Query().Get("q") fmt.Fprintf(w, "q=%s", q) }) if err := http.ListenAndServe("127.0.0.1:8080", mux); err != nil { log.Fatal(err) } }

При адресе /search?q=go в ответе q=go. Без параметра q получится q=.

Два имени читают отдельными вызовами:

package main import ( "fmt" "log" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("GET /page", func(w http.ResponseWriter, r *http.Request) { lang := r.URL.Query().Get("lang") theme := r.URL.Query().Get("theme") fmt.Fprintf(w, "%s/%s", lang, theme) }) if err := http.ListenAndServe("127.0.0.1:8080", mux); err != nil { log.Fatal(err) } }

Дан путь /hello и параметр name. Напишите полный main.go, который при /hello?name=ann вернет текст ann.

Дан следующий код:

limit := r.URL.Query().Get("limit") fmt.Fprint(w, len(limit))

Скажите, что напечатается в ответе, если параметра limit в адресе нет.

Дан адрес /search?q=go&q=sql. Скажите, что вернет Get("q") для первого значения ключа.

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