Sobes.tech
Junior — Middle

Millised on erinevused paanika ja kriitilise vea vahel, mis peatab programmi täitmise?

sobes.tech AI

Vastus AI-lt

Go keeles on panic mehhanism, mis aktiveerub kriitilise vea korral programmi käivitamise ajal, näiteks skaala piiridest väljaminek või otsene panic()-i väljakutse. panic põhjustab praeguse gorutina normaalse täitmise kohese lõpetamise ja algatab "stack unwinding" (stegi lahtivõtmise) protsessi, mille käigus kutsutakse defer-iga märgitud funktsioone. Kui panic-i ei püütakse recover() abil, lõpeb programm veaga.

Kriitiline viga, mis peatab programmi täitmise, võib olla põhjustatud panic-ist, kuid võib olla seotud ka süsteemitasandi fataalsete vigadega (näiteks mälusegmenteerimisviga), mida koodis ei saa töödelda.

Peamised erinevused:

  • Panic — kontrollitav mehhanism, mida saab püüda ja töödelda recover() abil.
  • Kriitiline viga — võib olla töötlematu, viies programmi kohesele lõpetamisele ilma taastamise võimaluseta.

Näide panic ja recover kasutamisest:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Taastumine pärast panic:", r)
        }
    }()
    panic("midagi läks valesti")
}

func main() {
    mayPanic()
    fmt.Println("Programm jätkub")
}