Middle+
Où doit-on écrire recover dans la structure de l'application (main.go, référentiel, service, contrôleur) ?
sobes.tech IA
Réponse de l'IA
В 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, а не в бизнес-логике или репозиториях.