Middle+
Gde treba da se napiše recover u strukturi aplikacije (main.go, repozitorijum, servis, kontroler)?
sobes.tech АИ
Одговор од АИ
В 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, а не в бизнес-логике или репозиториях.