Назад к вопросам
Самокат
Middle — Middle+
77
Объясните механизм восстановления системы после сбоя в контексте использования Recover.
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Go механизм recover используется для перехвата паники (panic) и восстановления нормального выполнения программы. Это позволяет системе после сбоя не завершаться аварийно, а обработать ошибку и продолжить работу.
Основная идея:
- При возникновении паники выполнение функций прерывается и начинается "раскрутка" стека.
- Если в одной из вызываемых функций есть отложенный вызов (
defer), в котором вызываетсяrecover(), то она перехватывает панику и возвращает значение ошибки. - После этого программа может обработать ошибку и продолжить выполнение.
Пример:
func safeDivide(a, b int) int {
defer func() {
if r := recover(); r != nil {
fmt.Println("Восстановление после паники:", r)
}
}()
return a / b // если b == 0, будет panic
}
func main() {
fmt.Println(safeDivide(10, 2)) // 5
fmt.Println(safeDivide(10, 0)) // Восстановление после паники: runtime error: integer divide by zero
}
Таким образом, recover помогает сделать систему устойчивой к неожиданным ошибкам, предотвращая аварийное завершение.