url parsing

This commit is contained in:
badkaktus 2019-10-11 10:40:17 +03:00
parent d982b0a724
commit 908f8dc36e
3 changed files with 20 additions and 22 deletions

View File

@ -52,7 +52,7 @@ Epoch
Форматирование времени (Time Formatting / Parsing) Форматирование времени (Time Formatting / Parsing)
Случайные числа (Random Numbers) Случайные числа (Random Numbers)
Парсинг чисел (Number Parsing) Парсинг чисел (Number Parsing)
URL Parsing Парсинг URL (URL Parsing)
SHA1 Hashes SHA1 Hashes
Base64 Encoding Base64 Encoding
Reading Files Reading Files

View File

@ -1,5 +1,5 @@
// URLs provide a [uniform way to locate resources](https://adam.herokuapp.com/past/2010/3/30/urls_are_the_uniform_way_to_locate_resources/). // URL - это [уникальный локатор ресурса](https://adam.herokuapp.com/past/2010/3/30/urls_are_the_uniform_way_to_locate_resources/).
// Here's how to parse URLs in Go. // Рассмотрим как парсить URL в Go.
package main package main
@ -11,45 +11,43 @@ import (
func main() { func main() {
// We'll parse this example URL, which includes a // Мы будем разбирать этот URL, который содержит схему,
// scheme, authentication info, host, port, path, // аутентификационные данные, хост, порт, путь, параметры
// query params, and query fragment. // и фрагмент запроса.
s := "postgres://user:pass@host.com:5432/path?k=v#f" s := "postgres://user:pass@host.com:5432/path?k=v#f"
// Parse the URL and ensure there are no errors. // Парсим URL и убеждаемся, что нет ошибок.
u, err := url.Parse(s) u, err := url.Parse(s)
if err != nil { if err != nil {
panic(err) panic(err)
} }
// Accessing the scheme is straightforward. // Получаем схему
fmt.Println(u.Scheme) fmt.Println(u.Scheme)
// `User` contains all authentication info; call // `User` содержит всю аутентификационную информацию; используйте
// `Username` and `Password` on this for individual // `Username` и `Password` если надо получить конкретное поле.
// values.
fmt.Println(u.User) fmt.Println(u.User)
fmt.Println(u.User.Username()) fmt.Println(u.User.Username())
p, _ := u.User.Password() p, _ := u.User.Password()
fmt.Println(p) fmt.Println(p)
// The `Host` contains both the hostname and the port, // `Host` содержит поля хост и порт, если они определены.
// if present. Use `SplitHostPort` to extract them. // Воспользуйтесь `SplitHostPort`, чтобы разделить их.
fmt.Println(u.Host) fmt.Println(u.Host)
host, port, _ := net.SplitHostPort(u.Host) host, port, _ := net.SplitHostPort(u.Host)
fmt.Println(host) fmt.Println(host)
fmt.Println(port) fmt.Println(port)
// Here we extract the `path` and the fragment after // Так можно получить `путь` и фрагмент после `#`.
// the `#`.
fmt.Println(u.Path) fmt.Println(u.Path)
fmt.Println(u.Fragment) fmt.Println(u.Fragment)
// To get query params in a string of `k=v` format, // Для получения параметров в строке вида `k=v`
// use `RawQuery`. You can also parse query params // используйте `RawQuery`. Вы так же можете разобрать
// into a map. The parsed query param maps are from // запрос в карту. Разобранный запрос в карту из строк
// strings to slices of strings, so index into `[0]` // превращается в срез строк, так первый элемент будет
// if you only want the first value. // находиться по адресу `[0]`.
fmt.Println(u.RawQuery) fmt.Println(u.RawQuery)
m, _ := url.ParseQuery(u.RawQuery) m, _ := url.ParseQuery(u.RawQuery)
fmt.Println(m) fmt.Println(m)

View File

@ -1,5 +1,5 @@
# Running our URL parsing program shows all the different # Запуск нашей программы парсинга URL показывает все
# pieces that we extracted. # различные фрагменты, которые мы извлекли.
$ go run url-parsing.go $ go run url-parsing.go
postgres postgres
user:pass user:pass