Как в Go обогащать ошибку контекстом и передавать её дальше, сохраняя исходную ошибку?

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

Короткий ответ

Что ответить на собеседовании

Используйте 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее