Sobes.tech
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.