Sobes.tech
Back to questions
Senior
1

How do you handle errors in Go in a production-ready application?

Companies where asked
AndersenAndersen

Answer from AI

sobes.tech AI

В Go обработка ошибок строится на явной проверке возвращаемого значения error после вызова функций. В production-ready приложениях важно:

  • Всегда проверять ошибки сразу после вызова функции.
  • Использовать обёртки ошибок (fmt.Errorf с %w) для сохранения контекста.
  • Логировать ошибки с достаточной детализацией, включая стек вызовов, если необходимо.
  • Для критичных ошибок применять стратегию повторных попыток или fallback.
  • В HTTP-сервисах возвращать корректные коды статуса и понятные сообщения.

Пример обработки ошибки с обёрткой и логированием:

package main

import (
    "errors"
    "fmt"
    "log"
)

func doSomething() error {
    return errors.New("исходная ошибка")
}

func main() {
    err := doSomething()
    if err != nil {
        wrappedErr := fmt.Errorf("ошибка в doSomething: %w", err)
        log.Printf("Произошла ошибка: %v", wrappedErr)
        // Дополнительная обработка, например, возврат ошибки выше
    }
}