Тип net.IP

Тип net.IP представляет IP-адрес в виде среза байтов. Он поддерживает как IPv4 (4 байта), так и IPv6 (16 байт) адреса. Этот тип является основным для работы с IP-адресами в Go и предоставляет методы для преобразования в строку, проверки типа адреса и сравнения.

Создание IP-адреса с помощью ParseIP

Функция net.ParseIP преобразует строковое представление IP-адреса в тип net.IP. Если строка не является корректным адресом, функция возвращает nil.

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  ip := net.ParseIP("192.168.1.1")
  fmt.Println(ip)
}

Результат выполнения кода:

go"192.168.1.1"

Создание IP-адреса из байтов

Тип net.IP является псевдонимом для []byte, поэтому его можно создать напрямую из среза байтов.

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  ip := net.IP{192, 168, 1, 1}
  fmt.Println(ip)
}

Результат выполнения кода:

go"192.168.1.1"

Проверка типа адреса

Метод IsLoopback проверяет, является ли адрес локальным (127.0.0.1 для IPv4 или ::1 для IPv6).

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  ip := net.ParseIP("127.0.0.1")
  res := ip.IsLoopback()
  fmt.Println(res)
}

Результат выполнения кода:

gotrue

Проверка IPv4

Метод To4 преобразует адрес в IPv4. Если адрес не является IPv4, метод возвращает nil.

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  ip := net.ParseIP("192.168.1.1")
  ipv4 := ip.To4()
  fmt.Println(ipv4)
}

Результат выполнения кода:

go"192.168.1.1"

Сравнение IP-адресов

Метод Equal проверяет равенство двух IP-адресов. Он учитывает, что IPv4 адрес может быть представлен как IPv6 совместимый адрес.

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  ip1 := net.ParseIP("192.168.1.1")
  ip2 := net.ParseIP("192.168.1.1")
  res := ip1.Equal(ip2)
  fmt.Println(res)
}

Результат выполнения кода:

gotrue

Смотрите также

  • функцию net.ParseIP,
    которая преобразует строку в IP-адрес
  • функцию net.ParseCIDR,
    которая разбирает CIDR-нотацию IP-адреса
  • функцию net.LookupIP,
    которая выполняет DNS-запрос для получения IP-адресов
  • тип net.IPNet,
    который представляет IP-сеть с маской