🟡 Средний · 2 очк. Обработка ошибок
Как обернуть ошибку с контекстом в Go 1.13+?
A errors.Wrap(err)
B fmt.Errorf("... %w", err)
C err.Wrap(msg)
D errors.New(err)
Объяснение вопроса

Используйте глагол %w в fmt.Errorf: он оборачивает ошибку, сохраняя цепочку для errors.Is и errors.As.

Правильно

if err != nil {
    return fmt.Errorf("config load: %w", err)
}

Обёрнутая ошибка реализует Unwrap() error, поэтому errors.Is(err, originalErr) и errors.As(err, &target) работают.

Неправильно

return fmt.Errorf("config load: %v", err)

Глагол %v только добавляет текст в сообщение, но не оборачивает ошибку - цепочка теряется, errors.Is по оригинальной ошибке не сработает.

Итог

  • %w - обёртка с сохранением цепочки
  • %v - только форматирование, без обёртки
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.