Sobes.tech
Junior — Middle

Vai ir iespējams noķert un apstrādāt panikas defer izsaukuma iekšienē Go?

sobes.tech AI

Atbilde no AI

Go valodā jūs varat izmantot defer, lai apstrādātu panikas, bet defer izsaukums pats par sevi neuzķer paniku; to vajag uzķert iekšā funkcijā, kas ir atlikta ar recover().

Piemērs:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Panika noķerta un apstrādāta:", r)
        }
    }()
    panic("kaut kas nogāja greizi")
}

Šeit recover() tiek izsaukts iekšā atliktajā funkcijā un ļauj noķert paniku, kas radusies safeCall. Tādējādi, panikas nevar tieši "noķert" defer, bet tās var apstrādāt iekšā ar recover().