2019-10-11 10:40:17 +03:00

56 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// URL - это [уникальный локатор ресурса](https://adam.herokuapp.com/past/2010/3/30/urls_are_the_uniform_way_to_locate_resources/).
// Рассмотрим как парсить URL в Go.
package main
import (
"fmt"
"net"
"net/url"
)
func main() {
// Мы будем разбирать этот URL, который содержит схему,
// аутентификационные данные, хост, порт, путь, параметры
// и фрагмент запроса.
s := "postgres://user:pass@host.com:5432/path?k=v#f"
// Парсим URL и убеждаемся, что нет ошибок.
u, err := url.Parse(s)
if err != nil {
panic(err)
}
// Получаем схему
fmt.Println(u.Scheme)
// `User` содержит всю аутентификационную информацию; используйте
// `Username` и `Password` если надо получить конкретное поле.
fmt.Println(u.User)
fmt.Println(u.User.Username())
p, _ := u.User.Password()
fmt.Println(p)
// `Host` содержит поля хост и порт, если они определены.
// Воспользуйтесь `SplitHostPort`, чтобы разделить их.
fmt.Println(u.Host)
host, port, _ := net.SplitHostPort(u.Host)
fmt.Println(host)
fmt.Println(port)
// Так можно получить `путь` и фрагмент после `#`.
fmt.Println(u.Path)
fmt.Println(u.Fragment)
// Для получения параметров в строке вида `k=v`
// используйте `RawQuery`. Вы так же можете разобрать
// запрос в карту. Разобранный запрос в карту из строк
// превращается в срез строк, так первый элемент будет
// находиться по адресу `[0]`.
fmt.Println(u.RawQuery)
m, _ := url.ParseQuery(u.RawQuery)
fmt.Println(m)
fmt.Println(m["k"][0])
}