Функция net.SplitHostPort

Функция net.SplitHostPort разделяет сетевой адрес вида host:port на две отдельные строки: хост и порт. В первый параметр функция принимает строку с адресом, а возвращает два значения: строку с хостом и строку с портом. Если адрес не содержит порта или имеет неверный формат, функция возвращает ошибку.

Функция корректно обрабатывает IPv6-адреса, которые заключаются в квадратные скобки, например [2001:db8::1]:8080. В этом случае хост возвращается без скобок: 2001:db8::1.

Синтаксис

gohost, port, err := net.SplitHostPort(hostport)

Пример sect

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

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  host, port, err := net.SplitHostPort("localhost:8080")
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println("Host:", host)
  fmt.Println("Port:", port)
}

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

go"Host: localhost"
"Port: 8080"

Пример sect

Давайте разделим адрес с IPv6-адресом:

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  host, port, err := net.SplitHostPort("[2001:db8::1]:443")
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println("Host:", host)
  fmt.Println("Port:", port)
}

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

go"Host: 2001:db8::1"
"Port: 443"

Пример sect

Функция возвращает ошибку, если адрес имеет неверный формат. Давайте передадим адрес без порта:

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  host, port, err := net.SplitHostPort("example.com")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println("Host:", host)
  fmt.Println("Port:", port)
}

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

go"Error: address example.com: missing port in address"

Пример sect

Также функция вернет ошибку, если порт не является числом:

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  host, port, err := net.SplitHostPort("example.com:abc")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println("Host:", host)
  fmt.Println("Port:", port)
}

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

go"Error: strconv.Atoi: parsing \"abc\": invalid syntax"

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

  • функцию net.JoinHostPort,
    которая объединяет хост и порт в один адрес
  • функцию net.ParseIP,
    которая проверяет и преобразует строку в IP-адрес
  • функцию net.Dial,
    которая устанавливает сетевое соединение по адресу
  • функцию net.LookupHost,
    которая выполняет DNS-запрос для получения IP-адресов хоста