Sobes.tech
Junior — Middle

Kokios pasekmės turėtų būti tikėtinos, jei įvyks panika gorutinoje?

sobes.tech AI

Atsakymas iš AI

Jei gorutinoje įvyksta panika (panic), šios gorutinos vykdymas nutraukiamas, ir pradedamas stack unwinding procesas, kurio metu kviečiamos defer funkcijos.

Jei panika nėra valdoma (pavyzdžiui, naudojant recover defer funkcijoje), tai sukels visos programos užbaigimą.

Svarbu suprasti, kad panika vienoje gorutinoje tiesiogiai neveikia kitų gorutinių — jos toliau veikia, nebent panika sukeltų visos programos sustojimą.

Pavyzdys, kaip valdyti paniką:

func() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Pagauta ir valdoma panika:", r)
        }
    }()
    panic("kažkas nepavyko")
}()