Метод url.URL.Query

Метод url.URL.Query преобразует строку запроса (часть URL после знака ?) в тип url.Values. Это структура, которая представляет собой карту, где ключом является имя параметра, а значением — срез строк. Метод полезен для разбора URL-параметров в веб-приложениях, при работе с API или при разборе HTTP-запросов. Он не требует ручного разбора строки — вся логика уже встроена в пакет net/url.

Синтаксис

gofunc (u *URL) Query() Values

Метод не принимает никаких параметров и возвращает значение типа url.Values.

Пример

Разберем простой URL с параметрами и получим их значения с помощью Query:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  rawURL := "http://example.com/page?name=john&age=30"
  parsedURL, err := url.Parse(rawURL)
  if err != nil {
    fmt.Println("Error parsing URL:", err)
    return
  }

  query := parsedURL.Query()
  fmt.Println(query)
}

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

gomap[age:[30] name:[john]]

Пример

Получим значения отдельных параметров с помощью метода Get структуры url.Values:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  rawURL := "http://example.com/search?q=golang&lang=en"
  parsedURL, _ := url.Parse(rawURL)

  query := parsedURL.Query()

  search := query.Get("q")
  lang := query.Get("lang")
  missing := query.Get("nonexistent")

  fmt.Printf("Search: %s, Language: %s, Missing: %s\n", search, lang, missing)
}

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

go"Search: golang, Language: en, Missing: "

Пример

Обработаем URL с одинаковыми именами параметров — метод вернет срез всех значений:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  rawURL := "http://example.com/filter?color=red&color=blue&color=green"
  parsedURL, _ := url.Parse(rawURL)

  query := parsedURL.Query()
  colors := query["color"]

  fmt.Println(colors)
}

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

go[red blue green]

Пример

Если строка запроса отсутствует, метод вернет пустую карту, а не nil:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  rawURL := "http://example.com/noquery"
  parsedURL, _ := url.Parse(rawURL)

  query := parsedURL.Query()

  fmt.Println(len(query))
}

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

go"0"

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

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