Функция net.SplitHostPort
Функция net.SplitHostPort разделяет сетевой адрес
вида host:port на две отдельные строки: хост и порт.
В первый параметр функция принимает строку с адресом,
а возвращает два значения: строку с хостом и строку с портом.
Если адрес не содержит порта или имеет неверный формат,
функция возвращает ошибку.
Функция корректно обрабатывает IPv6-адреса, которые
заключаются в квадратные скобки, например
[2001:db8::1]:8080. В этом случае хост возвращается
без скобок: 2001:db8::1.
Синтаксис
host, port, err := net.SplitHostPort(hostport)
Пример sect
Давайте разделим стандартный адрес вида
localhost:8080 на хост и порт:
package 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)
}
Результат выполнения кода:
"Host: localhost"
"Port: 8080"
Пример sect
Давайте разделим адрес с IPv6-адресом:
package 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)
}
Результат выполнения кода:
"Host: 2001:db8::1"
"Port: 443"
Пример sect
Функция возвращает ошибку, если адрес имеет неверный формат. Давайте передадим адрес без порта:
package 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)
}
Результат выполнения кода:
"Error: address example.com: missing port in address"
Пример sect
Также функция вернет ошибку, если порт не является числом:
package 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)
}
Результат выполнения кода:
"Error: strconv.Atoi: parsing \"abc\": invalid syntax"
Смотрите также
-
функцию
net.JoinHostPort,
которая объединяет хост и порт в один адрес -
функцию
net.ParseIP,
которая проверяет и преобразует строку в IP-адрес -
функцию
net.Dial,
которая устанавливает сетевое соединение по адресу -
функцию
net.LookupHost,
которая выполняет DNS-запрос для получения IP-адресов хоста