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().