Sobes.tech
Junior — Middle

Proqramın icrasını dayandıran panika və kritik səhv arasında nə fərq var?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, panic kritik bir səhv baş verdikdə işə düşən mexanizmdir, məsələn, dilim sərhədlərindən kənara çıxmaq və ya açıq şəkildə panic() çağırmaq kimi. panic cari goroutine-un normal icrasını dərhal dayandırır və "stack unwinding" (yığımın açılması) prosesini başlatır, burada defer ilə təyin olunmuş funksiyalar çağırılır. Əgər panic, recover() ilə tutulmazsa, proqram xəta ilə sona çatacaq.

Proqramın icrasını dayandıran kritik səhv panic ilə baş verə bilər, lakin həmçinin sistem səviyyəsindəki ölümcül səhvlər (məsələn, seqment xətası) ilə də əlaqəli ola bilər və bu səhvlər kodda işlənə bilməz.

Əsas fərqlər:

  • Panic — idarə olunan mexanizm olub, recover() ilə tutulub işlənə bilər.
  • Kritik səhv — işlənməyə bilər, bu da proqramın dərhal sona çatmasına və bərpa imkanı olmadan başa çatmasına səbəb olur.

panicrecover istifadə nümunəsi:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Panikdən sonra bərpa:", r)
        }
    }()
    panic("nəsə səhv getdi")
}

func main() {
    mayPanic()
    fmt.Println("Proqram davam edir")
}