🔴 Сложный · 3 очк. Обработка ошибок
Что вернёт: err := fmt.Errorf("wrap: %w", os.ErrNotExist); errors.Is(err, os.ErrNotExist)?
A false
B true
C panic
D Ошибка компиляции
Объяснение вопроса

Вернёт true. Глагол %w в fmt.Errorf оборачивает os.ErrNotExist, сохраняя связь. errors.Is рекурсивно разворачивает цепочку и сравнивает с целевой ошибкой.

Почему не ==

err := fmt.Errorf("wrap: %w", os.ErrNotExist)
err == os.ErrNotExist  // false - err это другая обёртка
errors.Is(err, os.ErrNotExist)  // true

errors.Is вызывает Unwrap() у обёртки и проверяет внутреннюю ошибку. Так можно надёжно сравнивать с sentinel-ошибками даже через несколько уровней обёрток.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.