Skip to content

Типы ошибок

ClientError

go
type ClientError = engine.ClientError

Классифицированная ошибка HTTP-клиента, извлекается через errors.As.

Поля структуры

go
type ClientError struct {
    Type       ErrorType  // Классификация ошибки
    Message    string     // Описание ошибки
    Cause      error      // Базовая ошибка
    URL        string     // URL запроса (маскировано)
    Method     string     // HTTP-метод
    Attempts   int        // Количество попыток
    StatusCode int        // HTTP-код состояния (если применимо)
    Host       string     // Имя хоста (для размыкателя цепи)
}
ПолеТипОписание
TypeErrorTypeКлассификация ошибки для switch
MessagestringОписание ошибки
CauseerrorБазовая ошибка, доступна через Unwrap()
URLstringURL запроса (учётные данные маскированы)
MethodstringHTTP-метод (GET, POST и др.)
AttemptsintКоличество попыток (включая первый запрос)
StatusCodeintHTTP-код состояния (0 для не-HTTP ошибок)
HoststringИмя хоста запроса

Методы

МетодВозвращаемое значениеОписание
Error()stringФормат METHOD URL: Message: Cause (attempt N)
Code()stringЧитаемый код ошибки, например "NETWORK_ERROR", "TIMEOUT"
IsRetryable()boolМожно ли повторить
Unwrap()errorРаспаковка базовой ошибки
WithType(t ErrorType)*ClientErrorВозвращает копию с установленным типом ошибки (без изменения оригинала)
go
var clientErr *httpc.ClientError
if errors.As(err, &clientErr) {
    fmt.Println("Тип ошибки:", clientErr.Code())
    fmt.Println("URL запроса:", clientErr.URL)
    fmt.Println("Количество повторных попыток:", clientErr.Attempts)
    fmt.Println("Повторяемая:", clientErr.IsRetryable())
    fmt.Println("Базовая ошибка:", clientErr.Unwrap())
}

ErrorType

go
type ErrorType = engine.ErrorType

Перечисление классификации ошибок.

КонстантаОписаниеПовторяемая
ErrorTypeUnknownНеизвестная/неклассифицированная ошибкаНет
ErrorTypeNetworkСетевая ошибка (отказ соединения, сброс соединения и др.)По обстоятельствам
ErrorTypeTimeoutТаймаут запросаПо обстоятельствам¹
ErrorTypeContextCanceledОтмена контекстаНет
ErrorTypeResponseReadОшибка чтения тела ответаПо обстоятельствам
ErrorTypeTransportОшибка транспортного уровняДа
ErrorTypeRetryExhaustedПовторные попытки исчерпаныНет
ErrorTypeTLSОшибка TLSНет
ErrorTypeCertificateОшибка проверки сертификатаНет
ErrorTypeDNSОшибка разрешения DNSПо обстоятельствам
ErrorTypeValidationОшибка валидации запросаНет
ErrorTypeHTTPОшибка на уровне HTTPПо обстоятельствам

¹ Таймауты, вызванные дедлайном контекста (WithTimeout, TimeoutConfig.Request), не повторяются; повторяются только таймауты транспортного уровня (например, таймаут net.OpError).

Определение типа

go
result, err := client.Get(url)
if err != nil {
    var clientErr *httpc.ClientError
    if errors.As(err, &clientErr) {
        switch clientErr.Type {
        case httpc.ErrorTypeTimeout:
            log.Println("Таймаут запроса")
        case httpc.ErrorTypeNetwork:
            log.Println("Сетевая ошибка")
        case httpc.ErrorTypeTLS:
            log.Println("Ошибка TLS")
        case httpc.ErrorTypeCertificate:
            log.Println("Ошибка проверки сертификата")
        case httpc.ErrorTypeDNS:
            log.Println("Сбой разрешения DNS")
        case httpc.ErrorTypeRetryExhausted:
            log.Println("Повторные попытки исчерпаны")
        case httpc.ErrorTypeContextCanceled:
            log.Println("Запрос отменён")
        case httpc.ErrorTypeValidation:
            log.Println("Ошибка валидации запроса")
        }
    }
}

Переменные ошибок

Ошибки конфигурации

ПеременнаяОписание
ErrNilConfigКонфигурация равна nil
ErrInvalidTimeoutНекорректное значение таймаута
ErrInvalidRetryНекорректная конфигурация повторов
ErrInvalidConnectionНекорректная конфигурация соединений
ErrInvalidSecurityНекорректная конфигурация безопасности
ErrInvalidMiddlewareНекорректная конфигурация промежуточного ПО

Ошибки запроса

ПеременнаяОписание
ErrInvalidHeaderОшибка валидации заголовков запроса

Ошибки ответа

ПеременнаяОписание
ErrResponseBodyEmptyТело ответа пустое
ErrResponseBodyTooLargeТело ответа превышает лимит размера

Ошибки файлов

ПеременнаяОписание
ErrEmptyFilePathПуть к файлу пустой
ErrFileExistsФайл уже существует

Ошибки клиента

ПеременнаяОписание
ErrClientClosedКлиент закрыт

Сопоставление переменных

go
if errors.Is(err, httpc.ErrClientClosed) {
    // Клиент закрыт
}
if errors.Is(err, httpc.ErrResponseBodyEmpty) {
    // Тело ответа пустое
}

См. также