🔴 Сложный · 3 очк. Обработка ошибок
Что делает fmt.Errorf("%w и %w", err1, err2) (Go 1.20+)?
A Ошибка компиляции - два %w невозможны
B Оборачивает обе ошибки; errors.Is находит любую из них
C Оборачивает только первую ошибку
D panic
Объяснение вопроса

Начиная с Go 1.20, в одном вызове fmt.Errorf можно использовать несколько глаголов %w. Ошибка-результат оборачивает все переданные ошибки и реализует interface{ Unwrap() []error }.

err := fmt.Errorf("ошибки: %w и %w", err1, err2)
// errors.Is(err, err1) и errors.Is(err, err2) - true
// errors.Unwrap(err) возвращает nil; для списка - errors.Join или разбор через errors.Unwrap

Зачем

При параллельной работе (несколько горутин) часто нужно собрать несколько ошибок в одну. errors.Join(err1, err2) и многократный %w в fmt.Errorf позволяют строить такую цепочку и проверять её через errors.Is / errors.As.

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