Sobes.tech
Back to questions
Middle+
6

Как в Go обрабатываются ошибки? Чем отличаются errors.Is и errors.As?

Companies where asked
YadroYadro

Answer from AI

sobes.tech AI

В Go ошибки обрабатываются через возвращаемое значение типа error. Обычно функция возвращает результат и ошибку, и вызывающий код проверяет, не равна ли ошибка nil, чтобы понять, произошла ли ошибка.

Пакет errors из стандартной библиотеки предоставляет функции для работы с ошибками:

  • errors.Is(err, target error) bool — проверяет, соответствует ли ошибка err или какая-либо ошибка в цепочке оберток (wrapping) ошибке target. Используется для сравнения ошибок по значению, даже если ошибка обернута.

  • errors.As(err, target interface{}) bool — пытается привести ошибку err или одну из ошибок в цепочке к типу, указанному в target (указатель на интерфейс или структуру). Если приведение успешно, записывает ошибку в target и возвращает true. Используется для извлечения конкретного типа ошибки из цепочки.

Пример:

if errors.Is(err, sql.ErrNoRows) {
    // Обработка случая, когда запись не найдена
}

var pathErr *os.PathError
if errors.As(err, &pathErr) {
    // Обработка ошибки конкретного типа os.PathError
}