Sobes.tech
Назад к вопросам
Middle
5

errors.Is и errors.As — для чего нужны, какую проблему решают?

Компании, где спрашивали
Магнум

Ответ от нейросети

sobes.tech AI

В Go пакете errors функции errors.Is и errors.As предназначены для удобной и безопасной работы с цепочками ошибок, которые могут быть обёрнуты или вложены друг в друга.

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

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

Проблема, которую они решают — это необходимость работать с ошибками, которые могут быть обёрнуты с помощью fmt.Errorf("...: %w", err) или других механизмов, сохраняя при этом возможность проверить конкретный тип или значение исходной ошибки.

Пример:

if errors.Is(err, os.ErrNotExist) {
    fmt.Println("Файл не найден")
}

var pathErr *os.PathError
if errors.As(err, &pathErr) {
    fmt.Printf("Ошибка пути: %s\n", pathErr.Path)
}