Что такое упаковка ошибок

«Что такое упаковка ошибок» — вопрос из категории Golang, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Упаковка ошибок (error wrapping) в Go — это добавление дополнительного контекста к ошибке при её передаче вверх по стеку вызовов. Позволяет сохранить исходную ошибку, оборачивая её в новую с дополнительной информацией.

До Go 1.13 использовали fmt.Errorf с %v:

if err != nil {
    return fmt.Errorf("failed to process: %v", err)
}

С Go 1.13+ появился спец.формат %w:

if err != nil {
    return fmt.Errorf("failed to process: %w", err)
}

Для проверки упакованных ошибок:

if errors.Is(err, os.ErrNotExist) {
    // обработка
}

var pathError *os.PathError
if errors.As(err, &pathError) {
    // доступ к полям PathError
}

Ключевые преимущества:

  • Сохраняется цепочка ошибок
  • Можно проверять исходные ошибки через errors.Is/As
  • Улучшает диагностику проблем