Junior — Middle
Na czym polega konieczność użycia funkcji recover wewnątrz defer w Go?
sobes.tech AI
Odpowiedź od AI
W Go funkcja recover służy do przechwytywania panik (panic) i zapobiegania nagłemu zakończeniu programu. Jednak recover działa tylko wtedy, gdy jest wywoływana wewnątrz opóźnionej funkcji (defer).
Użycie recover w defer pozwala na:
- Bezpieczne obsłużenie paniki, na przykład poprzez logowanie błędu lub czyszczenie zasobów.
- Kontynuowanie wykonywania programu po panice, jeśli to możliwe.
Przykład:
func safeFunction() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Odzyskano z paniki:", r)
}
}()
// Kod, który może wywołać panic
panic("coś poszło nie tak")
}
Jeśli wywoła się recover poza defer, nie złapie paniki, a program zakończy się nagle. Dlatego recover zawsze umieszcza się wewnątrz defer dla poprawnego obsłużenia wyjątkowych sytuacji.