Ответ
Для проверки TCP-соединений в Go используются как встроенные средства стандартной библиотеки, так и внешние утилиты.
Встроенные средства Go
Основным инструментом является стандартный пакет net
.
-
net.DialTimeout()
— рекомендуемый способ. Он позволяет установить таймаут на попытку соединения, что предотвращает зависание программы, если удаленный хост недоступен.conn, err := net.DialTimeout("tcp", "golang.org:80", 3*time.Second) if err != nil { fmt.Println("Хост недоступен:", err) return } defer conn.Close() fmt.Println("Соединение успешно установлено!")
-
net.Dial()
— базовый вариант без явного таймаута. Таймаут может определяться настройками операционной системы, что делает его менее предсказуемым.conn, err := net.Dial("tcp", "127.0.0.1:8080") if err != nil { // Обработка ошибки } defer conn.Close()
-
Проверка соединения на уровне приложения (например, HTTP). Если вы работаете с конкретным протоколом, лучше проверять его, а не просто TCP-порт. Для этого используется пакет
net/http
.client := http.Client{Timeout: 5 * time.Second} resp, err := client.Get("http://example.com") if err != nil { // Ошибка на уровне TCP или HTTP } defer resp.Body.Close()
Внешние утилиты
Для быстрой диагностики из командной строки часто используют классические сетевые утилиты:
nc
(netcat): Позволяет быстро проверить, открыт ли порт.nc -vz example.com 80
.telnet
: Аналогичноnetcat
, используется для подключения к порту.telnet example.com 80
.nmap
: Мощный сканер портов для комплексной проверки хоста.