Sobes.tech
Back to questions
Middle+
1

Где прописывать recover в структуре приложения (main.go, репозиторий, сервис, контроллер)?

Companies where asked
МВидео/эльдорадо

Answer from AI

sobes.tech AI

В Go recover используется для перехвата паник и предотвращения аварийного завершения программы. Обычно recover прописывают в местах, где нужно гарантировать устойчивость приложения и обработку ошибок, не давая панике выйти наружу.

Чаще всего recover размещают:

  • В точке входа в приложение — например, в main.go внутри функции main или в корневом HTTP-сервере, чтобы перехватывать паники, которые не были обработаны на более низких уровнях.
  • В middleware или обработчиках HTTP-запросов, чтобы изолировать панику одного запроса и не падал весь сервер.

В сервисах, репозиториях и бизнес-логике обычно не ставят recover, так как это усложняет отладку и скрывает ошибки. Лучше позволить панике подняться выше и обработать её централизованно.

Пример использования в main.go:

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in main:", r)
            // логирование, очистка ресурсов
        }
    }()

    // запуск приложения
}

Таким образом, recover лучше использовать на границах приложения или в middleware, а не в бизнес-логике или репозиториях.