Что делать при возникновении ошибки Internal из сервиса

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

Ответ

При возникновении Internal ошибки (обычно 500 Internal Server Error) важно:

  1. Логировать ошибку с контекстом:
log.Printf("Internal error: %v, requestID: %s", err, requestID)
  1. Возвращать клиенту понятный ответ без деталей реализации:
http.Error(w, "Internal server error", http.StatusInternalServerError)
  1. Мониторить такие ошибки через системы типа Prometheus/Sentry.

  2. Не паниковать - использовать recover в горутинах:

defer func() {
    if r := recover(); r != nil {
        log.Println("Recovered from panic:", r)
    }
}()

Для gRPC:

status.Error(codes.Internal, "internal server error")

Важно различать временные ошибки (retry) и критические (требующие фикса).