РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1094 of 1593 menu

Интерфейс net.Addr

Интерфейс net.Addr представляет собой сетевой адрес в Go. Он используется для получения информации о типе сети и строковом представлении адреса для сетевых соединений, слушателей и других сетевых сущностей. Этот интерфейс реализуется такими типами, как net.TCPAddr, net.UDPAddr и net.IPAddr.

Интерфейс net.Addr содержит два метода: Network, который возвращает тип сети (например, "tcp", "udp" или "ip"), и String, который возвращает строковое представление адреса (например, "192.168.1.1:8080" или "[::1]:80").

Синтаксис

type Addr interface { Network() string String() string }

Пример

Давайте создадим TCP-адрес с использованием net.ResolveTCPAddr и вызовем методы интерфейса net.Addr:

package main import ( "fmt" "net" ) func main() { addr, err := net.ResolveTCPAddr("tcp", "192.168.1.1:8080") if err != nil { fmt.Println("Error:", err) return } fmt.Println("Network:", addr.Network()) fmt.Println("String:", addr.String()) }

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

"Network: tcp" "String: 192.168.1.1:8080"

Пример

Давайте получим адрес клиента из активного соединения, используя метод RemoteAddr, который возвращает интерфейс net.Addr:

package main import ( "fmt" "net" ) func main() { listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { fmt.Println("Error:", err) return } defer listener.Close() go func() { conn, err := net.Dial("tcp", listener.Addr().String()) if err == nil { conn.Close() } }() conn, err := listener.Accept() if err != nil { fmt.Println("Error:", err) return } defer conn.Close() remoteAddr := conn.RemoteAddr() fmt.Println("Network:", remoteAddr.Network()) fmt.Println("String:", remoteAddr.String()) }

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

"Network: tcp" "String: 127.0.0.1:XXXXX"

Обратите внимание, что реальный порт будет динамическим, поэтому вместо XXXXX будет конкретный номер порта.

Пример

Давайте сравним строковые представления адресов для разных типов сетей:

package main import ( "fmt" "net" ) func main() { addrs := []struct { network string address string }{ {"tcp", "192.168.1.1:8080"}, {"udp", "10.0.0.1:53"}, {"tcp", "[::1]:80"}, } for _, a := range addrs { addr, err := net.ResolveTCPAddr(a.network, a.address) if err != nil { fmt.Println("Error:", err) continue } fmt.Printf("Network: %s, String: %s\n", addr.Network(), addr.String()) } }

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

"Network: tcp, String: 192.168.1.1:8080" "Network: udp, String: 10.0.0.1:53" "Network: tcp, String: [::1]:80"

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

  • интерфейс net.Conn,
    который предоставляет методы для работы с сетевым соединением
  • интерфейс net.Listener,
    который используется для прослушивания входящих соединений
  • тип net.TCPAddr,
    который реализует интерфейс net.Addr для TCP-адресов
  • тип net.UDPAddr,
    который реализует интерфейс net.Addr для UDP-адресов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить