Sobes.tech
Назад к вопросам
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 помогает сделать систему устойчивой к неожиданным ошибкам, предотвращая аварийное завершение.