Sobes.tech
Junior — Middle

Czy można przechwytywać i obsługiwać paniki wewnątrz wywołania defer w Go?

sobes.tech AI

Odpowiedź od AI

W Go można używać defer do obsługi paniki, ale samo wywołanie defer nie łapie paniki; łapanie paniki wymaga użycia recover() wewnątrz funkcji odłożonej za pomocą defer.

Przykład:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Panika złapana i obsłużona:", r)
        }
    }()
    panic("coś poszło nie tak")
}

Tutaj recover() jest wywoływane wewnątrz funkcji odłożonej i pozwala złapać panikę, która wystąpiła w safeCall. W ten sposób, paniki nie można "łapać" bezpośrednio w defer, ale można je obsłużyć wewnątrz funkcji odłożonej za pomocą recover().