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

Тип net.AddrError

Тип net.AddrError представляет ошибку, возникающую при попытке выполнения операций с сетевыми адресами, когда указанный адрес имеет неверный формат или не может быть обработан. Этот тип реализует интерфейс error и содержит дополнительную информацию об ошибке, включая сам ошибочный адрес и сообщение с описанием проблемы. Тип полезен для отладки сетевых приложений и обработки ошибок парсинга адресов.

Структура типа

type AddrError struct { Err string // описание ошибки Addr string // ошибочный адрес }

Структура AddrError содержит два поля: Err с текстовым описанием проблемы и Addr с некорректным адресом, вызвавшим ошибку. Оба поля доступны для чтения и могут быть использованы для диагностики.

Метод Error

func (e *AddrError) Error() string

Метод Error возвращает строковое представление ошибки, объединяя сообщение об ошибке и некорректный адрес. Это позволяет использовать тип AddrError везде, где ожидается интерфейс error.

Метод Timeout

func (e *AddrError) Timeout() bool

Метод Timeout всегда возвращает false, так как ошибка адреса не связана с таймаутами. Этот метод реализует интерфейс net.Error для совместимости с другими сетевыми ошибками.

Метод Temporary

func (e *AddrError) Temporary() bool

Метод Temporary всегда возвращает false, поскольку ошибка адреса обычно указывает на постоянную проблему в формате адреса, а не на временную недоступность. Данный метод реализует интерфейс net.Error.

Пример получения ошибки

Попробуем установить соединение с неверным адресом и перехватим ошибку типа AddrError:

package main import ( "fmt" "net" ) func main() { _, err := net.Dial("tcp", "invalid:address") if err != nil { if addrErr, ok := err.(*net.AddrError); ok { fmt.Printf("Error: %s\n", addrErr.Err) fmt.Printf("Address: %s\n", addrErr.Addr) fmt.Printf("Full error: %s\n", addrErr.Error()) } } }

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

Error: dial tcp: address invalid:address: missing port in address Address: invalid:address Full error: dial tcp: address invalid:address: missing port in address

Пример с парсингом адреса

Попробуем разобрать некорректный IP-адрес с портом и обработаем возникающую ошибку:

package main import ( "fmt" "net" ) func main() { host, port, err := net.SplitHostPort("192.168.1") if err != nil { if addrErr, ok := err.(*net.AddrError); ok { fmt.Printf("Invalid address: %s\n", addrErr.Addr) fmt.Printf("Reason: %s\n", addrErr.Err) } } else { fmt.Printf("Host: %s, Port: %s\n", host, port) } }

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

Invalid address: 192.168.1 Reason: address 192.168.1: missing port in address

Пример использования в HTTP

При работе с HTTP-клиентом неверный адрес также может привести к ошибке AddrError:

package main import ( "fmt" "net" "net/http" ) func main() { client := &http.Client{} _, err := client.Get("http://bad:address") if err != nil { if addrErr, ok := err.(*net.AddrError); ok { fmt.Printf("Address error: %s\n", addrErr.Addr) fmt.Printf("Description: %s\n", addrErr.Err) } else { fmt.Printf("Other error: %s\n", err) } } }

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

Address error: bad:address Description: dial tcp: address bad:address: missing port in address

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

  • тип net.Error,
    который представляет интерфейс для сетевых ошибок
  • тип net.OpError,
    который представляет ошибки сетевых операций
  • тип net.DNSError,
    который представляет ошибки DNS-запросов
  • функцию net.SplitHostPort,
    которая разделяет адрес на хост и порт
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить