Используйте fmt.Errorf с %w, чтобы добавить контекст и сохранить цепочку ошибки. Проверяйте причину через errors.Is или извлекайте тип через errors.As.
Как в Go обогащать ошибку контекстом и передавать её дальше, сохраняя исходную ошибку?
Используйте fmt.Errorf с %w, чтобы добавить контекст и сохранить цепочку ошибки. Проверяйте причину через errors.Is или извлекайте тип через errors.As.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте fmt.Errorf с %w, чтобы добавить контекст и сохранить цепочку ошибки. Проверяйте причину через errors.Is или извлекайте тип через errors.As.
if err := save(user); err != nil {
return fmt.Errorf("save user: %w", err)
}
%v добавляет только текст и не создаёт wrapping-связь. В вызывающем коде errors.Is(err, target) проходит по цепочке, поэтому сравнение err == target часто недостаточно. Не включайте в контекст пароль, токен или полный объект пользователя и не дублируйте логирование на каждом уровне.
Источник: go.dev.