🟡 Средний · 2 очк. Обработка ошибок
Какой паттерн рекомендуется для проверки конкретной ошибки в Go?
A err.Error() == "not found"
B errors.Is(err, ErrNotFound)
C err == ErrNotFound
D switch err.(type)
Объяснение вопроса

Рекомендуется использовать errors.Is и errors.As. Обычное сравнение err == ErrNotFound не работает с обёрнутыми ошибками (fmt.Errorf("%w", err)). errors.Is проходит по цепочке Unwrap и находит целевую ошибку.

if errors.Is(err, ErrNotFound) {
    // обработать "не найдено"
}

var pathErr *fs.PathError
if errors.As(err, &pathErr) {
    fmt.Println(pathErr.Path)  // извлечь данные из ошибки
}

Почему не строковое сравнение

Текст ошибки может измениться при локализации или рефакторинге. Сравнение по типу и sentinel-значению (Is/As) стабильно. Обёртывайте свои ошибки через %w, чтобы цепочка сохранялась.

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