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

Параметры адреса в Go

После пути в адресе часто идут параметры: имя, знак равенства и значение, несколько пар разделяют амперсандом. Спецсимволы в значениях нужно кодировать, иначе адрес разберется неверно.

Тип url.Values это словарь строк по ключу. Метод добавления пары кладет значение в срез под именем, а метод Encode собирает готовую хвостовую часть без знака вопроса. Ее дописывают к пути через ? или передают в команду, которая принимает уже полный адрес.

Соберем запрос с двумя параметрами:

package main import ( "fmt" "io" "log" "net/http" "net/url" ) func main() { params := url.Values{} params.Set("q", "go") params.Set("page", "1") addr := "https://example.com/search?" + params.Encode() resp, err := http.Get(addr) if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.StatusCode, len(body)) }

Строка Encode даст безопасную форму "page=1&q=go" с учетом правил кодирования. Порядок пар может отличаться, для сервера это обычно не важно.

Тот же прием для локального сервиса с фильтром:

package main import ( "fmt" "io" "log" "net/http" "net/url" ) func main() { params := url.Values{} params.Add("tag", "news") params.Add("tag", "go") addr := "http://127.0.0.1:8080/items?" + params.Encode() resp, err := http.Get(addr) if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(string(body)) }

Даны имя параметра id и значение "42", базовый путь "http://127.0.0.1:8080/item":

base := "http://127.0.0.1:8080/item" id := "42"

Соберите полный адрес через url.Values и выполните запрос, закрыв тело ответа отложенно.

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

v := url.Values{} v.Set("lang", "ru") tail := v.Encode()

Скажите, что будет в tail и нужен ли в начале знак вопроса для склейки с путем.

Скажите, чем Set отличается от Add для одного и того же имени параметра.

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