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")
}