Пакет netip
Обзор
Пакет netip определяет тип IP-адреса, который является типом с малым значением. Основываясь на типе Addr, пакет также определяет AddrPort (IP-адрес и порт) и Prefix (IP-адрес и префикс длины в битах).
По сравнению с типом net.IP, тип Addr занимает меньше памяти, является неизменяемым и сравнимым (поддерживает == и может быть ключом в словаре).
Индекс
Файлы пакета
netip.go uint128.go
тип Addr 1.18
Addr представляет собой IPv4 или IPv6 адрес (с или без зоны адресации), аналогично net.IP или net.IPAddr.
В отличие от net.IP или net.IPAddr, Addr является сравнимым типом значения (он поддерживает == и может быть ключом в словаре) и является неизменяемым.
Нулевое значение Addr не является допустимым IP-адресом. Addr{} отличается как от 0.0.0.0, так и от ::.
type Addr struct {
// contains filtered or unexported fields
}
функция AddrFrom16 1.18
func AddrFrom16(addr [16]byte) Addr
AddrFrom16 возвращает IPv6-адрес, заданный байтами в addr. IPv4-адрес в IPv6-формате остается IPv6-адресом. (Используйте Unmap для преобразования, если это необходимо.)
функция AddrFrom4 1.18
func AddrFrom4(addr [4]byte) Addr
AddrFrom4 возвращает адрес IPv4-адреса, заданного байтами в addr.
функция AddrFromSlice 1.18
func AddrFromSlice(slice []byte) (ip Addr, ok bool)
AddrFromSlice анализирует 4- или 16-байтовый срез байтов как IPv4- или IPv6-адрес. Обратите внимание, что net.IP может быть передан непосредственно в качестве аргумента []byte. Если длина среза не равна 4 или 16, AddrFromSlice возвращает Addr{}, false.
функция IPv4Unspecified 1.18
func IPv4Unspecified() Addr
IPv4Unspecified возвращает неопределённый IPv4-адрес "0.0.0.0".
функция IPv6LinkLocalAllNodes 1.18
func IPv6LinkLocalAllNodes() Addr
IPv6LinkLocalAllNodes возвращает IPv6-мультиадресную группу «все узлы в локальной сети» ff02::1.
функция IPv6LinkLocalAllRouters 1.20
func IPv6LinkLocalAllRouters() Addr
IPv6LinkLocalAllRouters возвращает IPv6-мультиадресную группу «все маршрутизаторы в локальной сети» ff02::2.
функция IPv6Loopback 1.20
func IPv6Loopback() Addr
IPv6Loopback возвращает IPv6-адрес обратной связи ::1.
функция IPv6Unspecified 1.18
func IPv6Unspecified() Addr
IPv6Unspecified возвращает неопределенный IPv6-адрес "::".
функция MustParseAddr 1.18
func MustParseAddr(s string) Addr
MustParseAddr вызывает ParseAddr(s) и вызывает панику при ошибке. Предназначен для использования в тестах с жёстко заданными строками.
функция ParseAddr 1.18
func ParseAddr(s string) (Addr, error)
ParseAddr анализирует s как IP-адрес, возвращая результат. Строка s может быть в точечной десятичной форме ("192.0.2.1"), IPv6 ("2001:db8::68") или IPv6 с зоной адресации ("fe80::1cc0:3e8c:119f:c2e1%ens18").
функция (Addr) AppendBinary 1.24
func (ip Addr) AppendBinary(b []byte) ([]byte, error)
AppendBinary реализует интерфейс encoding.BinaryAppender.
функция (Addr) AppendText 1.24
func (ip Addr) AppendText(b []byte) ([]byte, error)
AppendText реализует интерфейс encoding.TextAppender, аналогично Addr.AppendTo.
функция (Addr) AppendTo 1.18
func (ip Addr) AppendTo(b []byte) []byte
AppendTo добавляет текстовое представление ip, сгенерированное Addr.MarshalText, к b и возвращает расширенный буфер.
функция (Addr) As16 1.18
func (ip Addr) As16() (a16 [16]byte)
As16 возвращает IP-адрес в его 16-байтовом представлении. IPv4-адреса возвращаются как IPv4-отображаемые IPv6-адреса. IPv6-адреса с зонами возвращаются без зоны (используйте метод Addr.Zone для её получения). Нулевое значение ip возвращает все нули.
функция (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.
функция (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-адресов, которые выходят за пределы текущего глобального уникаст-пространства IANA 2000::/3, за исключением пространства link-local адресов. Также возвращает true, даже если ip находится в пространстве частных IPv4-адресов или уникальном локальном пространстве IPv6-адресов. Возвращает false для нулевого Addr.
Для справки, см. RFC 1122, RFC 4291 и RFC 4632.
func (Addr) IsInterfaceLocalMulticast 1.18
func (ip Addr) IsInterfaceLocalMulticast() bool
IsInterfaceLocalMulticast сообщает, является ли ip IPv6-адресом локального интерфейса multicast.
func (Addr) IsLinkLocalMulticast 1.18
func (ip Addr) IsLinkLocalMulticast() bool
IsLinkLocalMulticast сообщает, является ли ip адресом link-local multicast.
func (Addr) IsLinkLocalUnicast 1.18
func (ip Addr) IsLinkLocalUnicast() bool
IsLinkLocalUnicast сообщает, является ли ip адресом link-local unicast.
func (Addr) IsLoopback 1.18
func (ip Addr) IsLoopback() bool
IsLoopback сообщает, является ли ip адресом loopback.
func (Addr) IsMulticast 1.18
func (ip Addr) IsMulticast() bool
IsMulticast сообщает, является ли ip multicast-адресом.
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.
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, 4-байтовую форму для IPv4-адреса и 16-байтовую форму с добавленной зоной для IPv6-адреса.
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 форм:
- "недействительный IP", если 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. Ожидает данные в формате, сгенерированном 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 — это операция no-op и возвращает ip без изменений.
func (Addr) Zone 1.18
func (ip Addr) Zone() string
Zone возвращает зону scoped addressing IPv6 ip, если она есть.
type 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.BinaryAppendler. Возвращает Addr.AppendBinary с добавленными двумя байтами, содержащими порт в little-endian.
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 добавляет текстовое кодирование p, сгенерированное AddrPort.MarshalText, в b и возвращает расширенный буфер.
func (AddrPort) Compare 1.22
func (p AddrPort) Compare(p2 AddrPort) int
Compare возвращает целое число, сравнивающее два AddrPort. Результат будет 0, если p == p2, -1, если p < p2, и +1, если p > p2. AddrPorts сортируются сначала по 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 с добавленными двумя байтами, содержащими порт в little-endian.
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.
type 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.AppendMarshaler. Возвращает 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 добавляет текстовое представление p, сгенерированное методом Prefix.MarshalText, в буфер b и возвращает расширенный буфер.
func (Prefix) Bits 1.18
func (p Prefix) Bits() int
Bits возвращает длину префикса p.
Возвращает -1 при недопустимых значениях.
func (Prefix) Contains 1.18
func (p Prefix) Contains(ip Addr) bool
Contains проверяет, входит ли ip в сеть p.
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 — нулевое значение, кодирование — пустая строка.
func (Prefix) Masked 1.18
func (p Prefix) Masked() Prefix
Masked возвращает p в каноническом виде, с замаскированными битами, кроме верхних p.Bits() бит p.Addr().
Если 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 возвращает CIDR-нотацию p: "<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/