Sobes.tech
Junior — Middle

Dastur ishini to'xtatadigan panika va kritik xato o'rtasidagi farqlar nimalardan iborat?

sobes.tech AI

AIdan javob

Go tilida, panic — bu dastur davomida muhim xato yuzaga kelganda ishlatiladigan mexanizm, masalan, massiv chegaralaridan tashqariga chiqish yoki panic() ni to'g'ridan-to'g'ri chaqirish. panic hozirgi goroutine ning normal bajarilishini darhol to'xtatadi va "stack unwinding" (stackni ochish) jarayonini boshlaydi, bu jarayonda defer bilan belgilangan funksiyalar chaqiriladi. Agar panic recover() yordamida ushlanmasa, dastur xato bilan yakunlanadi.

Dastur bajarilishini to'xtatadigan kritik xato panic bilan yuzaga kelishi mumkin, ammo tizim darajasidagi halokatli xatolar (masalan, segmentatsiya xatosi) bilan ham bog'liq bo'lishi mumkin va bu xatolar kodda ishlov berilmaydi.

Asosiy farqlar:

  • Panic — nazorat qilinadigan mexanizm bo'lib, recover() yordamida ushlanishi va ishlov berilishi mumkin.
  • Kritik xato — ishlov berilmasligi mumkin, bu esa dastur darhol tugashiga olib keladi va tiklash imkoniyatini bermaydi.

panic va recover dan foydalanish misoli:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Panikadan keyin tiklandi:", r)
        }
    }()
    panic("narsa noto'g'ri ketdi")
}

func main() {
    mayPanic()
    fmt.Println("Dastur davom etmoqda")
}