Тип url.Values

Тип url.Values представляет собой отображение map[string][]string и используется для работы с параметрами запроса и данными форм. Он предоставляет удобные методы для получения, установки и добавления значений. Основное преимущество этого типа - поддержка множественных значений для одного ключа.

Создание url.Values

Давайте создадим экземпляр url.Values с помощью функции url.ParseQuery или напрямую:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  params := url.Values{}
  params.Set("name", "john")
  params.Add("age", "25")
  params.Add("hobby", "reading")
  params.Add("hobby", "swimming")
  
  fmt.Println(params)
}

Результат выполнения кода:

gomap[age:[25] hobby:[reading swimming] name:[john]]

Метод Get

Метод Get возвращает первое значение для указанного ключа. Если ключ отсутствует, возвращается пустая строка:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  params := url.Values{}
  params.Set("name", "john")
  params.Add("hobby", "reading")
  params.Add("hobby", "swimming")
  
  res := params.Get("name")
  fmt.Println(res)
}

Результат выполнения кода:

go"john"

Метод Set

Метод Set устанавливает значение для указанного ключа, заменяя все существующие значения. Если ключ отсутствовал, он создается:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  params := url.Values{}
  params.Set("name", "john")
  params.Set("name", "jane")
  
  res := params.Get("name")
  fmt.Println(res)
}

Результат выполнения кода:

go"jane"

Метод Add

Метод Add добавляет значение к существующему ключу, сохраняя все предыдущие значения. Если ключ отсутствовал, он создается:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  params := url.Values{}
  params.Add("hobby", "reading")
  params.Add("hobby", "swimming")
  params.Add("hobby", "gaming")
  
  res := params["hobby"]
  fmt.Println(res)
}

Результат выполнения кода:

go[reading swimming gaming]

Метод Encode

Метод Encode преобразует параметры в строку запроса для использования в URL-адресах. Значения кодируются в соответствии с правилами URL:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  params := url.Values{}
  params.Set("name", "john doe")
  params.Add("age", "25")
  params.Add("hobby", "reading books")
  
  res := params.Encode()
  fmt.Println(res)
}

Результат выполнения кода:

go"age=25&hobby=reading+books&name=john+doe"

Метод ParseQuery

Функция ParseQuery парсит строку запроса и возвращает url.Values. Это удобный способ преобразовать URL-строку в структурированные данные:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  query := "name=jane&age=30&hobby=music&hobby=travel"
  params, err := url.ParseQuery(query)
  if err != nil {
    fmt.Println(err)
    return
  }
  
  fmt.Println(params)
}

Результат выполнения кода:

gomap[age:[30] hobby:[music travel] name:[jane]]

Смотрите также

  • тип url.URL,
    который представляет собой парсированный URL-адрес
  • функцию url.Parse,
    которая парсирует URL-строку в структуру url.URL
  • функцию url.QueryEscape,
    которая кодирует строку для использования в URL-запросах
  • функцию url.QueryUnescape,
    которая декодирует URL-закодированную строку