Как обрабатывать ошибку и возвращать её с информацией в Go

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

Gofmt.Errorfошибки

👁 В Go ошибку часто нужно не только зарегистрировать, но и передать с дополнительным контекстом. Это может быть полезно, когда ошибка происходит в глубокой функции, и важно передать больше данных, чтобы понять её причину.

📝 Вот как можно использовать стандартные средства Go для оборачивания ошибок с дополнительной информацией:

package main

import (
  "fmt"
  "errors"
)

// Функция для обработки ошибки с дополнительным контекстом
func someFunction() error {
  // Возвращаем ошибку с добавлением контекста
  return fmt.Errorf("что-то пошло не так в someFunction: %w", errors.New("ошибка соединения"))
}

func main() {
  if err := someFunction(); err != nil {
    // Обработка ошибки с контекстом
    fmt.Println("Ошибка:", err)
  }
}

📌 Что происходит:

  • Используем fmt.Errorf с флагом %w, чтобы обернуть ошибку и добавить больше контекста
  • Это позволяет передавать ошибки и добавлять к ним описание, чтобы легко понять, где она возникла и как её обработать
  • Мы можем использовать такую ошибку в верхнем слое и передать её дальше с деталями

❗️ Этот подход полезен для логирования и анализа ошибок в более крупных приложениях, когда важно отслеживать цепочку возникновения ошибок и добавлять в неё контекст. Применимо в продакшн-системах для лучшего мониторинга и диагностики.

tags: #go #разработка

❤️ @recura_tech

Скриншот кода на Go: пример оборачивания ошибки через fmt.Errorf с %w для добавления контекста; логотип RECURA.
Пример кода на Go с использованием fmt.Errorf и %w для добавления контекста к ошибке.

Читайте так же