🟢 Лёгкий · 1 очк. Обработка ошибок
Зачем объявлять ошибки как var ErrNotFound = errors.New("not found") на уровне пакета?
A Для экономии памяти
B Чтобы проверять через errors.Is, а не по тексту
C Это обязательное требование Go
D Только для экспорта ошибок
Объяснение вопроса

Чтобы сравнивать ошибки по идентичности (errors.Is(err, ErrNotFound)), а не по тексту. Текст сообщения может меняться - сравнение по нему хрупкое.

Sentinel-ошибки

var (
    ErrNotFound  = errors.New("not found")
    ErrForbidden = errors.New("forbidden")
)

if errors.Is(err, ErrNotFound) {
    return 404
}

Даже если ошибка обёрнута (fmt.Errorf("db: %w", ErrNotFound)), errors.Is найдёт её в цепочке. Сравнение err.Error() == "not found" ломается при смене формулировки.

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