Тип net.UDPAddr

Тип net.UDPAddr используется для хранения информации о UDP-адресе в сетевых операциях. Он содержит два основных поля: IP (тип net.IP) — IP-адрес узла, и Port (тип int) — номер порта. Этот тип реализует интерфейс net.Addr, что позволяет использовать его в функциях для работы с сетью. Основное предназначение net.UDPAddr — передача адреса назначения или источника при отправке и получении UDP-датаграмм.

Создание UDPAddr

Для создания нового экземпляра net.UDPAddr используется функция net.ResolveUDPAddr. Она принимает сетевой протокол ("udp", "udp4", "udp6") и строковое представление адреса в формате "host:port" или "ip:port". Функция возвращает указатель на net.UDPAddr и ошибку, если адрес не удалось разобрать.

Синтаксис

gofunc ResolveUDPAddr(network, address string) (*UDPAddr, error)

Пример

Давайте создадим UDP-адрес для локального сервера с портом 8080:

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Printf("IP: %s, Port: %d\n", addr.IP, addr.Port)
}

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

go"IP: 127.0.0.1, Port: 8080"

Пример

Разберем адрес для IPv6 и сравним его строковое представление:

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  addr, err := net.ResolveUDPAddr("udp6", "[::1]:9090")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Printf("IP: %s, Port: %d\n", addr.IP, addr.Port)
  fmt.Println("String:", addr.String())
}

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

go"IP: ::1, Port: 9090"
"String: [::1]:9090"

Пример

Попробуем указать неверный формат адреса, чтобы увидеть ошибку:

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  addr, err := net.ResolveUDPAddr("udp", "invalid:port")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Printf("IP: %s, Port: %d\n", addr.IP, addr.Port)
}

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

go"Error: address invalid:port: missing port in address"

Методы UDPAddr

Тип net.UDPAddr имеет метод Network, который возвращает имя сети ("udp", "udp4" или "udp6"), и метод String, возвращающий строковое представление адреса в формате "IP:port". Эти методы реализуют интерфейс net.Addr, что позволяет использовать UDPAddr в функциях, ожидающих этот интерфейс.

Пример

Продемонстрируем работу методов Network и String:

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  addr, _ := net.ResolveUDPAddr("udp4", "192.168.1.100:12345")

  fmt.Println("Network:", addr.Network())
  fmt.Println("String:", addr.String())
}

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

go"Network: udp4"
"String: 192.168.1.100:12345"

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

  • тип net.TCPAddr,
    который представляет адрес TCP
  • функцию net.Dial,
    которая устанавливает соединение по сети
  • функцию net.ListenPacket,
    которая создает UDP-соединение для прослушивания
  • тип net.UDPConn,
    который представляет UDP-соединение