cpp

Тип Header: словарь с HTTP-заголовками

Тип Header из пакета net/http описывает словарь с HTTP-заголовками. Объявление типа:

type Header map[string][]string

Пример:

// import "net/http"
h := http.Header{
   "Content-Type":    {"text/html; charset=UTF-8"},
   "Accept-Encoding": {"deflate", "gzip"},
}
fmt.Println(h)
// map[Accept-Encoding:[deflate gzip]
// Content-Type:[text/html; charset=UTF-8]]
for k, v := range h {
   fmt.Println(k, "=>", v)
}
// Content-Type => [text/html; charset=UTF-8]
// Accept-Encoding => [deflate gzip]

Тип Header содержит следующие методы:

  • Add() — добавляет новый элемент. Если ключ уже существует, то значение добавляется в слайс, а не заменяет существующее значение. Формат метода:
(http.Header).Add(key string, value string)

Пример:

h := http.Header{}
h.Add("Content-Type", "text/html; charset=UTF-8")
h.Add("Accept-Encoding", "deflate")
h.Add("Accept-Encoding", "gzip")
fmt.Println(h)
// map[Accept-Encoding:[deflate gzip]
// Content-Type:[text/html; charset=UTF-8]]
fmt.Println(h.Get("Content-Type"))
// text/html; charset=UTF-8
fmt.Println(h.Get("Accept-Encoding")) // deflate
  • Set() — добавляет новый элемент. Если ключ уже существует, то старое значение заменяется новым значением. Формат метода:
(http.Header).Set(key string, value string)

Пример:

h := http.Header{}
h.Add("Accept-Encoding", "deflate")
h.Set("Accept-Encoding", "gzip")
fmt.Println(h)
// map[Accept-Encoding:[gzip]]
fmt.Println(h.Get("Accept-Encoding")) // gzip
  • Get() — возвращает первое значение по ключу. Если элемент с таким ключом не существует, то возвращается пустая строка. Сравнение ключей не зависит от регистра символов. Формат метода:
(http.Header).Get(key string) string

Пример:

h := http.Header{}
h.Add("Accept-Encoding", "deflate")
h.Add("Accept-Encoding", "gzip")
fmt.Println(h["Accept-Encoding"])         // [deflate gzip]
fmt.Println(h.Get("Accept-Encoding"))     // deflate
fmt.Println(h.Get("accept-encoding"))     // deflate
fmt.Printf("%q\n", h.Get("Content-Type")) // ""
  • Values() — возвращает все значения по ключу. Если элемент с таким ключом не существует, то возвращается пустой слайс. Сравнение ключей не зависит от регистра символов. Возвращаемое значение копией не является. Формат метода:
(http.Header).Values(key string) []string

Пример:

h := http.Header{}
h.Add("Accept-Encoding", "deflate")
h.Add("Accept-Encoding", "gzip")
fmt.Println(h.Values("Accept-Encoding"))     // [deflate gzip]
fmt.Println(h.Values("accept-encoding"))     // [deflate gzip]
fmt.Printf("%q\n", h.Values("Content-Type")) // []
  • Del() — удаляет элемент с указанным ключом. Сравнение ключей не зависит от регистра символов. Формат метода:
(http.Header).Del(key string)

Пример:

h := http.Header{}
h.Add("Accept-Encoding", "deflate")
fmt.Println(h) // map[Accept-Encoding:[deflate]]
h.Del("Accept-Encoding")
fmt.Println(h) // map[]
  • Clone() — возвращает копию словаря. Формат метода:
(http.Header).Clone() http.Header

Пример:

h := http.Header{}
h.Add("Accept-Encoding", "deflate")
h2 := h.Clone()
fmt.Println(h2) // map[Accept-Encoding:[deflate]]
  • Write() — записывает значения словаря в поток, разделяя заголовки комбинацией \r\n. Формат метода:
(http.Header).Write(w io.Writer) error

Пример:

h := http.Header{}
h.Add("Content-Type", "text/html; charset=UTF-8")
h.Add("Accept-Encoding", "deflate")
h.Add("Accept-Encoding", "gzip")
buf := &bytes.Buffer{}
fmt.Println(h.Write(buf)) // <nil>
fmt.Printf("%q\n", buf.Bytes())
// "Accept-Encoding: deflate\r\nAccept-Encoding: gzip\r\n
// Content-Type: text/html; charset=UTF-8\r\n"
  • WriteSubset() — записывает значения словаря в поток, разделяя заголовки комбинацией \r\n. Формат метода:
(http.Header).WriteSubset(w io.Writer,
              exclude map[string]bool) error

Если во втором параметре указано значение nil, то записываются все заголовки. Если указан словарь, а в нем присутствует ключ с названием заголовка и значением true, то заголовок не будет записан в поток. Пример:

h := http.Header{}
h.Add("Content-Type", "text/html; charset=UTF-8")
h.Add("Accept-Encoding", "deflate")
h.Add("Content-Length", "21")
buf := &bytes.Buffer{}
fmt.Println(h.WriteSubset(buf, map[string]bool{
   "Accept-Encoding": true,
})) // <nil>
fmt.Printf("%q\n", buf.Bytes())
// "Content-Length: 21\r\nContent-Type: text/html;
// charset=UTF-8\r\n"
buf2 := &bytes.Buffer{}
fmt.Println(h.WriteSubset(buf2, nil)) // <nil>
fmt.Printf("%q\n", buf2.Bytes())
// "Accept-Encoding: deflate\r\nContent-Length: 21\r\n
// Content-Type: text/html; charset=UTF-8\r\n"

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

Реквизиты

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

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

cpp