Sobes.tech
Middle — Middle+

Wyjaśnij mechanizm odzyskiwania systemu po awarii w kontekście korzystania z Recover.

sobes.tech AI

Odpowiedź od AI

W języku Go mechanizm recover służy do przechwytywania panik (panic) i przywracania normalnego wykonywania programu. Pozwala to systemowi, po awarii, nie kończyć się nagle, lecz obsłużyć błąd i kontynuować pracę.

Główna idea:

  • Gdy wystąpi panic, wykonanie funkcji zostaje przerwane i rozpoczyna się "rozpakowywanie" stosu.
  • Jeśli w jednej z wywoływanych funkcji znajduje się opóźnione wywołanie (defer), które wywołuje recover(), to ono przechwytuje panic i zwraca wartość błędu.
  • Po tym program może obsłużyć błąd i kontynuować wykonywanie.

Przykład:

func safeDivide(a, b int) int {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Przywracanie po panice:", r)
        }
    }()
    return a / b // jeśli b == 0, wystąpi panic
}

func main() {
    fmt.Println(safeDivide(10, 2)) // 5
    fmt.Println(safeDivide(10, 0)) // Przywracanie po panice: runtime error: integer divide by zero
}

W ten sposób recover pomaga uczynić system odpornym na nieoczekiwane błędy, zapobiegając nagłemu zakończeniu działania.