В production коде я обрабатываю паники с помощью функции recover() из Go внутри отложенной функции. Это позволяет приложению продолжать работу вместо полного краша.
Стандартный подход использует отложенную функцию, которая проверяет восстановленные значения:
defer func() {
if r := recover(); r != nil {
log.Println("Recovered from panic:", r)
}
}()
Этот паттерн работает, потому что recover() функционирует только внутри отложенной функции и возвращает nil, если паника не произошла.
Я применяю восстановление после паники точечно:
Recover — это не обработка ошибок — это подушка безопасности для действительно исключительных ситуаций. Я разграничиваю паники, после которых можно продолжить работу, и те, что указывают на серьёзные проблемы, требующие немедленного внимания.
Паники должны возникать только из-за ошибок программиста или действительно исключительных условий. Для обычных ошибок я использую стандартную обработку ошибок в Go — возвращаю error вместо того, чтобы полагаться на recover.
Функция recover() вернёт ненулевое значение только если её вызвать внутри отложенной функции в том же goroutine, где произошла паника.
Новый — ещё не проверен сообществом
Вы