cpp

Структура URL: URL-адрес

Структура URL из пакета net/url описывает URL-адрес. Объявление структуры:

// import "net/url"
type URL struct {
   Scheme      string
   Opaque      string
   User        *Userinfo
   Host        string
   Path        string
   RawPath     string
   ForceQuery  bool
   RawQuery    string
   Fragment    string
   RawFragment string
}

Создать экземпляр структуры URL позволяют следующие функции:

  • Parse() — выполняет разбор строки с URL-адресом, который может быть как абсолютный, так и относительный. Формат функции:
url.Parse(rawURL string) (*url.URL, error)

Через первое возвращаемое значение доступен экземпляр структуры URL. Через второе возвращаемое значение доступен объект ошибки или nil, если операция выполнена успешно. Пример:

u, err := url.Parse("http://localhost/index.php")
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(u) // http://localhost/index.php
  • ParseRequestURI() — выполняет разбор строки с абсолютным URL-адресом без якоря. Формат функции:
url.ParseRequestURI(rawURL string) (*url.URL, error)

Через первое возвращаемое значение доступен экземпляр структуры URL. Через второе возвращаемое значение доступен объект ошибки или nil, если операция выполнена успешно. Пример:

u, err := url.ParseRequestURI("http://localhost/index.php")
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(u) // http://localhost/index.php

Структура URL содержит следующие основные методы и поля:

  • String() — возвращает URL-адрес в виде строки. Формат метода:
(*url.URL).String() string

Пример:

u, err := url.Parse(
              "http://localhost:80/index.php?x=5&c=%D0%B0#metka")
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(u.String())
// http://localhost:80/index.php?x=5&c=%D0%B0#metka
  • Scheme — содержит протокол:
fmt.Println(u.Scheme) // http
  • Host — содержит домен и номер порта, разделенные двоеточием:
fmt.Println(u.Host) // localhost:80

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

u2, err := url.Parse("http://localhost/index.php")
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(u2.Host) // localhost
  • Hostname() — возвращает домен. Формат метода:
(*url.URL).Hostname() string

Пример:

fmt.Println(u.Hostname()) // localhost
  • Port() — возвращает номер порта или пустую строку. Формат метода:
(*url.URL).Port() string

Пример:

fmt.Println(u.Port())         // 80
fmt.Printf("%q\n", u2.Port()) // ""
  • Path — содержит путь:
fmt.Println(u.Path) // /index.php
  • EscapedPath() — возвращает путь без преобразования. Формат метода:
(*url.URL).EscapedPath() string

Пример:

fmt.Println(u.EscapedPath()) // /index.php
  • RequestURI() — возвращает путь и строку запроса. Формат метода:
(*url.URL).RequestURI() string

Пример:

fmt.Println(u.RequestURI()) // /index.php?x=5&c=%D0%B0
  • RawQuery — содержит строку запроса или пустую строку:
fmt.Println(u.RawQuery)         // x=5&c=%D0%B0
fmt.Printf("%q\n", u2.RawQuery) // ""
  • ForceQuery — если поле содержит true, то при отсутствии строки запроса будет добавляться символ ?:
fmt.Println(u2.ForceQuery) // false
fmt.Println(u2) // http://localhost/index.php
u2.ForceQuery = true
fmt.Println(u2) // http://localhost/index.php?
  • Query() — разбирает строку запроса и возвращает словарь, ключами которого являются названия параметров, а значениями — строковые слайсы со значениями параметров. Формат метода:
(*url.URL).Query() url.Values
type Values map[string][]string

Пример:

m := u.Query()
fmt.Println(m)          // map[c:[а] x:[5]]
fmt.Println(m.Get("c")) // а
fmt.Println(m.Get("x")) // 5
  • Fragment — содержит якорь или пустую строку:
fmt.Println(u.Fragment)         // metka
fmt.Printf("%q\n", u2.Fragment) // ""
  • EscapedFragment() — возвращает якорь без преобразования. Формат метода:
(*url.URL).EscapedFragment() string

Пример:

fmt.Println(u.EscapedFragment()) // metka
  • User — содержит данные для авторизации:
ftp, err := url.Parse("ftp://user:123@localhost:21/index.php")
if err != nil {
   fmt.Println(err)
   return
}
user := ftp.User
fmt.Println(user)            // user:123
fmt.Println(user.Username()) // user
fmt.Println(user.Password()) // 123 true
  • IsAbs() — возвращает true, если путь абсолютный, и false — в противном случае. Формат метода:
(*url.URL).IsAbs() bool

Пример:

fmt.Println(u.IsAbs()) // true
  • Redacted() — возвращает строку с URL-адресом, внутри которой пароль заменен символами xxxxx. Формат метода:
(*url.URL).Redacted() string

Пример:

fmt.Println(ftp.String())
// ftp://user:123@localhost:21/index.php
fmt.Println(ftp.Redacted())
// ftp://user:xxxxx@localhost:21/index.php
  • ResolveReference() — преобразует относительный путь в абсолютный с учетом базового пути. Формат метода:
(*url.URL).ResolveReference(ref *url.URL) *url.URL

Пример:

base, err := url.Parse("http://localhost/test.php")
if err != nil {
   fmt.Println(err)
   return
}
ref, err := url.Parse("/index.php")
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(base.ResolveReference(ref))
// http://localhost/index.php
  • Parse() — преобразует относительный путь в абсолютный с учетом базового пути, предварительно разбирая строку с URL-адресом. Формат метода:
(*url.URL).Parse(ref string) (*url.URL, error)

Пример:

base, err := url.Parse("http://localhost/test.php")
if err != nil {
   fmt.Println(err)
   return
}
ref, err := base.Parse("/index.php")
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(ref) // http://localhost/index.php
  • MarshalBinary() — преобразует значение в байтовый слайс. Формат метода:
(*url.URL).MarshalBinary() (text []byte, err error)

Пример:

u, err := url.Parse("http://localhost/index.php")
if err != nil {
   fmt.Println(err)
   return
}
b, err := u.MarshalBinary()
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(string(b)) // http://localhost/index.php
  • UnmarshalBinary() — записывает значения из байтового слайса в структуру URL. Формат метода:
(*url.URL).UnmarshalBinary(text []byte) error

Пример:

u := &url.URL{}
err := u.UnmarshalBinary([]byte("http://localhost/index.php"))
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(u) // http://localhost/index.php

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp