🟡 Средний · 2 очк. Обработка ошибок
Что делает errors.Is(err, target)?
A Сравнивает строки ошибок
B Проверяет, есть ли target в цепочке ошибок
C Создаёт новую ошибку
D Оборачивает ошибку
Объяснение вопроса

errors.Is(err, target) рекурсивно разворачивает цепочку обёрнутых ошибок (через Unwrap()) и сравнивает каждую с target. Возвращает true, если находит совпадение.

Зачем это нужно

Обычное err == target не сработает для обёрнутой ошибки: fmt.Errorf("wrap: %w", os.ErrNotExist) создаёт новое значение, и err == os.ErrNotExist будет false. errors.Is заглядывает внутрь цепочки.

err := fmt.Errorf("read file: %w", os.ErrNotExist)
if errors.Is(err, os.ErrNotExist) {
    // true - ошибка где-то в цепочке
}

Сравнение с ==

  • err == target - только точное совпадение указателя/значения
  • errors.Is(err, target) - проверка по всей цепочке Unwrap()
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.