Проверяет умение добавлять контекст к ошибкам и сохранять исходную причину для последующего разбора.
Упаковка ошибок — это создание новой ошибки на основе старой с добавлением текста контекста, при этом сохраняется ссылка на исходную ошибку. В Go для этого используют fmt.Errorf("%w", err) или errors.Wrap из сторонних библиотек. Упакованную ошибку можно «распаковать» функцией errors.Unwrap или проверить через errors.Is и errors.As.
Упаковка ошибок помогает понять, где и почему произошла сбойная ситуация, сохраняя стек вызовов и оригинальную ошибку.
Создание упаковки:
Стандартно:
if err != nil {
return fmt.Errorf("не удалось прочитать файл %s: %w", filename, err)
}Сторонние: github.com/pkg/errors.Wrap(err, "контекст").
Unwrap и проверка:
errors.Unwrap(err) возвращает внутреннюю ошибку.
errors.Is(err, target) проверяет, содержит ли цепочка target.
errors.As(err, &typedErr) извлекает ошибку определённого типа.
Преимущества:
Ясный контекст возникновения.
Возможность обработки конкретных ошибок на любом уровне.
Когда применять:
При передаче ошибки через границы пакетов.
Для логирования и трассировки.