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łujerecover(), 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.