Пакет netip
Обзор
Пакет netip определяет тип IP-адреса, представляющий собой компактный тип-значение. На основе типа Addr пакет также определяет AddrPort (IP-адрес и порт) и Prefix (IP-адрес и префикс длиной в битах).
По сравнению с типом net.IP, тип Addr занимает меньше памяти, является неизменяемым и сравнимым (поддерживает == и может использоваться в качестве ключа карты).
Указатель
Файлы пакета
netip.go uint128.go
тип Addr 1.18
Addr представляет IPv4- или IPv6-адрес (со scoped-зоной адресации или без неё), аналогичный net.IP или net.IPAddr.
В отличие от net.IP или net.IPAddr, Addr является сравнимым типом-значением (поддерживает == и может использоваться в качестве ключа карты) и неизменяемым.
Нулевое значение Addr не является допустимым IP-адресом. Addr{} отличается и от 0.0.0.0, и от ::.
type Addr struct {
// contains filtered or unexported fields
}
func AddrFrom16 1.18
func AddrFrom16(addr [16]byte) Addr
AddrFrom16 возвращает IPv6-адрес, заданный байтами addr. IPv4-адрес, отображённый в IPv6, остаётся IPv6-адресом. (При необходимости используйте Addr.Unmap для преобразования.)
func AddrFrom4 1.18
func AddrFrom4(addr [4]byte) Addr
AddrFrom4 возвращает адрес IPv4-адреса, заданного байтами addr.
func AddrFromSlice 1.18
func AddrFromSlice(slice []byte) (ip Addr, ok bool)
AddrFromSlice разбирает срез байтов длиной 4 или 16 как IPv4- или IPv6-адрес. Обратите внимание, что net.IP можно передать напрямую в качестве аргумента []byte. Если длина slice не равна 4 или 16, AddrFromSlice возвращает Addr{}, false.
func IPv4Unspecified 1.18
func IPv4Unspecified() Addr
IPv4Unspecified возвращает неопределённый IPv4-адрес "0.0.0.0".
func IPv6LinkLocalAllNodes 1.18
func IPv6LinkLocalAllNodes() Addr
IPv6LinkLocalAllNodes возвращает IPv6-адрес многоадресной рассылки link-local для всех узлов ff02::1.
func IPv6LinkLocalAllRouters 1.20
func IPv6LinkLocalAllRouters() Addr
IPv6LinkLocalAllRouters возвращает IPv6-адрес многоадресной рассылки link-local для всех маршрутизаторов ff02::2.
func IPv6Loopback 1.20
func IPv6Loopback() Addr
IPv6Loopback возвращает IPv6-адрес обратной петли ::1.
func IPv6Unspecified 1.18
func IPv6Unspecified() Addr
IPv6Unspecified возвращает неопределённый IPv6-адрес "::".
func MustParseAddr 1.18
func MustParseAddr(s string) Addr
MustParseAddr вызывает ParseAddr(s) и вызывает панику при ошибке. Предназначена для использования в тестах со строками, заданными непосредственно в коде.
func ParseAddr 1.18
func ParseAddr(s string) (Addr, error)
ParseAddr разбирает s как IP-адрес и возвращает результат. Строка s может быть записана в десятичной точечной нотации ("192.0.2.1"), в формате IPv6 ("2001:db8::68") или в формате IPv6 с scoped-зоной адресации ("fe80::1cc0:3e8c:119f:c2e1%ens18").
func (Addr) AppendBinary 1.24
func (ip Addr) AppendBinary(b []byte) ([]byte, error)
AppendBinary реализует интерфейс encoding.BinaryAppender.
func (Addr) AppendText 1.24
func (ip Addr) AppendText(b []byte) ([]byte, error)
AppendText реализует интерфейс encoding.TextAppender. Кодирование совпадает с результатом Addr.AppendTo.
func (Addr) AppendTo 1.18
func (ip Addr) AppendTo(b []byte) []byte
AppendTo добавляет к b текстовое представление ip, сформированное методом Addr.MarshalText, и возвращает расширенный буфер.
func (Addr) As16 1.18
func (ip Addr) As16() (a16 [16]byte)
As16 возвращает IP-адрес в 16-байтовом представлении. IPv4-адреса возвращаются как IPv4-адреса, отображённые в IPv6. IPv6-адреса с зонами возвращаются без зоны (для её получения используйте метод Addr.Zone). Нулевое значение ip возвращает набор нулей.
func (Addr) As4 1.18
func (ip Addr) As4() (a4 [4]byte)
As4 возвращает IPv4-адрес или IPv4-адрес в формате IPv6 в 4-байтовом представлении. Если ip — нулевой Addr или IPv6-адрес, As4 вызывает панику. Обратите внимание, что 0.0.0.0 не является нулевым Addr.
func (Addr) AsSlice 1.18
func (ip Addr) AsSlice() []byte
AsSlice возвращает IPv4- или IPv6-адрес в соответствующем 4- или 16-байтовом представлении.
func (Addr) BitLen 1.18
func (ip Addr) BitLen() int
BitLen возвращает количество битов в IP-адресе: 128 для IPv6, 32 для IPv4 и 0 для нулевого Addr.
Обратите внимание, что IPv4-адреса, отображённые в IPv6, считаются IPv6-адресами и поэтому имеют длину 128 бит.
func (Addr) Compare 1.18
func (ip Addr) Compare(ip2 Addr) int
Compare возвращает целое число, сравнивающее два IP-адреса. Результат равен 0, если ip == ip2, -1, если ip < ip2, и +1, если ip > ip2. Определение «меньше» совпадает с определением в методе Addr.Less.
func (Addr) Is4 1.18
func (ip Addr) Is4() bool
Is4 сообщает, является ли ip IPv4-адресом.
Возвращает false для IPv4-адресов, отображённых в IPv6. См. Addr.Unmap.
func (Addr) Is4In6 1.18
func (ip Addr) Is4In6() bool
Is4In6 сообщает, является ли ip «IPv4-адресом, отображённым в IPv6», как определено в RFC 4291. Иными словами, сообщает, входит ли ip в диапазон ::ffff:0:0/96.
func (Addr) Is6 1.18
func (ip Addr) Is6() bool
Is6 сообщает, является ли ip IPv6-адресом, включая IPv4-адреса, отображённые в IPv6.
func (Addr) IsGlobalUnicast 1.18
func (ip Addr) IsGlobalUnicast() bool
IsGlobalUnicast сообщает, является ли ip глобальным одноадресным адресом.
Метод возвращает true для IPv6-адресов вне текущего диапазона глобальной одноадресной адресации 2000::/3, выделенного IANA, за исключением пространства link-local. Он также возвращает true, если ip находится в частном пространстве IPv4-адресов или пространстве уникальных локальных IPv6-адресов. Для нулевого Addr возвращается false.
См. RFC 1122, RFC 4291 и RFC 4632.
func (Addr) IsInterfaceLocalMulticast 1.18
func (ip Addr) IsInterfaceLocalMulticast() bool
IsInterfaceLocalMulticast сообщает, является ли ip IPv6-адресом многоадресной рассылки уровня интерфейса.
func (Addr) IsLinkLocalMulticast 1.18
func (ip Addr) IsLinkLocalMulticast() bool
IsLinkLocalMulticast сообщает, является ли ip адресом многоадресной рассылки link-local.
func (Addr) IsLinkLocalUnicast 1.18
func (ip Addr) IsLinkLocalUnicast() bool
IsLinkLocalUnicast сообщает, является ли ip одноадресным адресом link-local.
func (Addr) IsLoopback 1.18
func (ip Addr) IsLoopback() bool
IsLoopback сообщает, является ли ip адресом обратной петли.
func (Addr) IsMulticast 1.18
func (ip Addr) IsMulticast() bool
IsMulticast сообщает, является ли ip адресом многоадресной рассылки.
func (Addr) IsPrivate 1.18
func (ip Addr) IsPrivate() bool
IsPrivate сообщает, является ли ip частным адресом согласно RFC 1918 (IPv4-адреса) и RFC 4193 (IPv6-адреса). Иными словами, сообщает, входит ли ip в диапазон 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 или fc00::/7. Поведение совпадает с net.IP.IsPrivate.
IsPrivate не определяет свойство безопасности адресов и не должен использоваться для управления доступом.
func (Addr) IsUnspecified 1.18
func (ip Addr) IsUnspecified() bool
IsUnspecified сообщает, является ли ip неопределённым адресом: IPv4-адресом "0.0.0.0" или IPv6-адресом "::".
Обратите внимание, что нулевой Addr не является неопределённым адресом.
func (Addr) IsValid 1.18
func (ip Addr) IsValid() bool
IsValid сообщает, является ли Addr инициализированным адресом (не нулевым Addr).
Обратите внимание, что значения "0.0.0.0" и "::" являются допустимыми.
func (Addr) Less 1.18
func (ip Addr) Less(ip2 Addr) bool
Less сообщает, располагается ли ip перед ip2 при сортировке. Сначала IP-адреса сортируются по длине, затем по адресу. IPv6-адреса с зонами располагаются сразу после такого же адреса без зоны.
func (Addr) MarshalBinary 1.18
func (ip Addr) MarshalBinary() ([]byte, error)
MarshalBinary реализует интерфейс encoding.BinaryMarshaler. Для нулевого Addr метод возвращает срез нулевой длины, для IPv4-адреса — 4-байтовое представление, а для IPv6-адреса — 16-байтовое представление с добавленной зоной.
func (Addr) MarshalText 1.18
func (ip Addr) MarshalText() ([]byte, error)
MarshalText реализует интерфейс encoding.TextMarshaler. Кодирование совпадает с результатом Addr.String, за одним исключением: если ip — нулевой Addr, кодированное представление является пустой строкой.
func (Addr) Next 1.18
func (ip Addr) Next() Addr
Next возвращает адрес, следующий за ip. Если такого адреса нет, возвращается нулевой Addr.
func (Addr) Prefix 1.18
func (ip Addr) Prefix(b int) (Prefix, error)
Prefix оставляет только старшие b битов IP-адреса, создавая Prefix заданной длины. Если ip — нулевой Addr, Prefix всегда возвращает нулевой Prefix и nil в качестве ошибки. В противном случае, если bits меньше нуля или больше ip.BitLen(), Prefix возвращает ошибку.
func (Addr) Prev 1.18
func (ip Addr) Prev() Addr
Prev возвращает IP-адрес, предшествующий ip. Если такого адреса нет, возвращается нулевое значение IP.
func (Addr) String 1.18
func (ip Addr) String() string
String возвращает строковое представление IP-адреса ip в одном из 5 форматов:
- "invalid IP" для нулевого Addr
- IPv4 в десятичной точечной нотации ("192.0.2.1")
- IPv6 ("2001:db8::1")
- "::ffff:1.2.3.4" (если Addr.Is4In6)
- IPv6 с зоной ("fe80:db8::1%eth0")
Обратите внимание: в отличие от метода IP.String пакета net, для IPv4-адресов, отображённых в IPv6, перед четырьмя десятичными октетами выводится префикс "::ffff:".
func (Addr) StringExpanded 1.18
func (ip Addr) StringExpanded() string
StringExpanded подобен Addr.String, но IPv6-адреса выводятся с ведущими нулями и без сжатия "::". Например, "2001:db8::1" преобразуется в "2001:0db8:0000:0000:0000:0000:0000:0001".
func (Addr) Unmap 1.18
func (ip Addr) Unmap() Addr
Unmap возвращает ip без префикса IPv4-адреса, отображённого в IPv6, если такой префикс есть.
То есть, если ip — IPv6-адрес, содержащий IPv4-адрес, метод возвращает вложенный IPv4-адрес. В противном случае ip возвращается без изменений.
func (*Addr) UnmarshalBinary 1.18
func (ip *Addr) UnmarshalBinary(b []byte) error
UnmarshalBinary реализует интерфейс encoding.BinaryUnmarshaler. Метод ожидает данные в формате, создаваемом методом Addr.MarshalBinary.
func (*Addr) UnmarshalText 1.18
func (ip *Addr) UnmarshalText(text []byte) error
UnmarshalText реализует интерфейс encoding.TextUnmarshaler. IP-адрес должен быть представлен в формате, принимаемом методом ParseAddr.
Если text пуст, UnmarshalText присваивает *ip нулевой Addr и возвращает отсутствие ошибки.
func (Addr) WithZone 1.18
func (ip Addr) WithZone(zone string) Addr
WithZone возвращает IP-адрес, совпадающий с ip, но с указанной зоной. Если zone пуста, зона удаляется. Если ip — IPv4-адрес, WithZone ничего не делает и возвращает ip без изменений.
func (Addr) Zone 1.18
func (ip Addr) Zone() string
Zone возвращает scoped-зону адресации IPv6 для ip, если она задана.
тип AddrPort 1.18
AddrPort представляет IP-адрес и номер порта.
type AddrPort struct {
// contains filtered or unexported fields
}
func AddrPortFrom 1.18
func AddrPortFrom(ip Addr, port uint16) AddrPort
AddrPortFrom возвращает AddrPort с указанными IP-адресом и портом. Память не выделяется.
func MustParseAddrPort 1.18
func MustParseAddrPort(s string) AddrPort
MustParseAddrPort вызывает ParseAddrPort(s) и вызывает панику при ошибке. Предназначена для использования в тестах со строками, заданными непосредственно в коде.
func ParseAddrPort 1.18
func ParseAddrPort(s string) (AddrPort, error)
ParseAddrPort разбирает s как AddrPort.
Разрешение имён не выполняется: и адрес, и порт должны быть числовыми.
func (AddrPort) Addr 1.18
func (p AddrPort) Addr() Addr
Addr возвращает IP-адрес p.
func (AddrPort) AppendBinary 1.24
func (p AddrPort) AppendBinary(b []byte) ([]byte, error)
AppendBinary реализует интерфейс encoding.BinaryAppender. Метод возвращает результат Addr.AppendBinary с двумя дополнительными байтами в конце, содержащими порт в порядке байтов от младшего к старшему.
func (AddrPort) AppendText 1.24
func (p AddrPort) AppendText(b []byte) ([]byte, error)
AppendText реализует интерфейс encoding.TextAppender. Кодирование совпадает с результатом AddrPort.AppendTo.
func (AddrPort) AppendTo 1.18
func (p AddrPort) AppendTo(b []byte) []byte
AppendTo добавляет к b текстовое представление p, сформированное методом AddrPort.MarshalText, и возвращает расширенный буфер.
func (AddrPort) Compare 1.22
func (p AddrPort) Compare(p2 AddrPort) int
Compare возвращает целое число, сравнивающее два AddrPort. Результат равен 0, если p == p2, -1, если p < p2, и +1, если p > p2. Сначала AddrPort сортируются по IP-адресу, затем по порту.
func (AddrPort) IsValid 1.18
func (p AddrPort) IsValid() bool
IsValid сообщает, является ли p.Addr() допустимым. Все порты допустимы, включая нулевой.
func (AddrPort) MarshalBinary 1.18
func (p AddrPort) MarshalBinary() ([]byte, error)
MarshalBinary реализует интерфейс encoding.BinaryMarshaler. Метод возвращает результат Addr.MarshalBinary с двумя дополнительными байтами в конце, содержащими порт в порядке байтов от младшего к старшему.
func (AddrPort) MarshalText 1.18
func (p AddrPort) MarshalText() ([]byte, error)
MarshalText реализует интерфейс encoding.TextMarshaler. Кодирование совпадает с результатом AddrPort.String, за одним исключением: если p.Addr() — нулевой Addr, кодированное представление является пустой строкой.
func (AddrPort) Port 1.18
func (p AddrPort) Port() uint16
Port возвращает порт p.
func (AddrPort) String 1.18
func (p AddrPort) String() string
func (*AddrPort) UnmarshalBinary 1.18
func (p *AddrPort) UnmarshalBinary(b []byte) error
UnmarshalBinary реализует интерфейс encoding.BinaryUnmarshaler. Метод ожидает данные в формате, создаваемом методом AddrPort.MarshalBinary.
func (*AddrPort) UnmarshalText 1.18
func (p *AddrPort) UnmarshalText(text []byte) error
UnmarshalText реализует интерфейс encoding.TextUnmarshaler. AddrPort должен быть представлен в формате, создаваемом методом AddrPort.MarshalText или принимаемом методом ParseAddrPort.
тип Prefix 1.18
Prefix — это префикс IP-адреса (CIDR), представляющий IP-сеть.
Задаются первые Prefix.Bits() битов Addr(). Остальные биты соответствуют любому адресу. Диапазон значений Bits() составляет [0,32] для IPv4 или [0,128] для IPv6.
type Prefix struct {
// contains filtered or unexported fields
}
func MustParsePrefix 1.18
func MustParsePrefix(s string) Prefix
MustParsePrefix вызывает ParsePrefix(s) и вызывает панику при ошибке. Предназначена для использования в тестах со строками, заданными непосредственно в коде.
func ParsePrefix 1.18
func ParsePrefix(s string) (Prefix, error)
ParsePrefix разбирает s как префикс IP-адреса. Строка может иметь вид "192.168.1.0/24" или "2001:db8::/32" — это нотация CIDR, определённая в RFC 4632 и RFC 4291. В префиксах IPv6 зоны не допускаются; при наличии зоны будет возвращена ошибка.
Обратите внимание, что биты маски адреса не обнуляются. Для этого используйте Masked.
func PrefixFrom 1.18
func PrefixFrom(ip Addr, bits int) Prefix
PrefixFrom возвращает Prefix с указанным IP-адресом и длиной префикса в битах.
Память не выделяется. В отличие от Addr.Prefix, PrefixFrom не маскирует биты узла в ip.
Если bits меньше нуля или больше ip.BitLen, Prefix.Bits вернёт недопустимое значение -1.
func (Prefix) Addr 1.18
func (p Prefix) Addr() Addr
Addr возвращает IP-адрес p.
func (Prefix) AppendBinary 1.24
func (p Prefix) AppendBinary(b []byte) ([]byte, error)
AppendBinary реализует интерфейс encoding.BinaryAppender. Метод возвращает результат Addr.AppendBinary с дополнительным байтом в конце, содержащим биты префикса.
func (Prefix) AppendText 1.24
func (p Prefix) AppendText(b []byte) ([]byte, error)
AppendText реализует интерфейс encoding.TextAppender. Результат совпадает с результатом Prefix.AppendTo.
func (Prefix) AppendTo 1.18
func (p Prefix) AppendTo(b []byte) []byte
AppendTo добавляет к b текстовое представление p, сформированное методом Prefix.MarshalText, и возвращает расширенный буфер.
func (Prefix) Bits 1.18
func (p Prefix) Bits() int
Bits возвращает длину префикса p.
Для недопустимого значения возвращается -1.
func (Prefix) Compare 1.26
func (p Prefix) Compare(p2 Prefix) int
Compare возвращает целое число, сравнивающее два префикса. Результат равен 0, если p == p2, -1, если p < p2, и +1, если p > p2. Сначала префиксы сортируются по допустимости (недопустимые перед допустимыми), затем по семейству адресов (IPv4 перед IPv6), затем по адресу префикса с маской, длине префикса и адресу без маски.
func (Prefix) Contains 1.18
func (p Prefix) Contains(ip Addr) bool
Contains сообщает, включает ли сеть p адрес ip.
IPv4-адрес не будет соответствовать префиксу IPv6. IPv4-адрес, отображённый в IPv6, не будет соответствовать префиксу IPv4. IP-адрес с нулевым значением не будет соответствовать ни одному префиксу. Если у ip есть зона IPv6, Contains возвращает false, поскольку зоны удаляются из префиксов.
func (Prefix) IsSingleIP 1.18
func (p Prefix) IsSingleIP() bool
IsSingleIP сообщает, содержит ли p ровно один IP-адрес.
func (Prefix) IsValid 1.18
func (p Prefix) IsValid() bool
IsValid сообщает, находится ли p.Bits() в допустимом диапазоне для p.Addr(). Если p.Addr() — нулевой Addr, IsValid возвращает false. Обратите внимание: если p — нулевой Prefix, то p.IsValid() == false.
func (Prefix) MarshalBinary 1.18
func (p Prefix) MarshalBinary() ([]byte, error)
MarshalBinary реализует интерфейс encoding.BinaryMarshaler. Метод возвращает результат Addr.MarshalBinary с дополнительным байтом в конце, содержащим биты префикса.
func (Prefix) MarshalText 1.18
func (p Prefix) MarshalText() ([]byte, error)
MarshalText реализует интерфейс encoding.TextMarshaler. Кодирование совпадает с результатом Prefix.String, за одним исключением: если p — нулевой Prefix, кодированное представление является пустой строкой.
func (Prefix) Masked 1.18
func (p Prefix) Masked() Prefix
Masked возвращает p в канонической форме, маскируя все биты p.Addr(), кроме старших p.Bits().
Если p равен нулю или недопустим по другой причине, Masked возвращает нулевой Prefix.
func (Prefix) Overlaps 1.18
func (p Prefix) Overlaps(o Prefix) bool
Overlaps сообщает, содержат ли p и o хотя бы один общий IP-адрес.
Если p и o относятся к разным семействам адресов или хотя бы один из них содержит нулевой IP-адрес, метод возвращает false. Как и в методе Contains, префикс с IPv4-адресом, отображённым в IPv6, рассматривается как маска IPv6.
func (Prefix) String 1.18
func (p Prefix) String() string
String возвращает p в нотации CIDR: "<ip>/<bits>".
func (*Prefix) UnmarshalBinary 1.18
func (p *Prefix) UnmarshalBinary(b []byte) error
UnmarshalBinary реализует интерфейс encoding.BinaryUnmarshaler. Метод ожидает данные в формате, создаваемом методом Prefix.MarshalBinary.
func (*Prefix) UnmarshalText 1.18
func (p *Prefix) UnmarshalText(text []byte) error
UnmarshalText реализует интерфейс encoding.TextUnmarshaler. Ожидается, что IP-адрес будет представлен в формате, принимаемом функцией ParsePrefix или создаваемом методом Prefix.MarshalText.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/net/netip/