Sobes.tech
Middle+

Go'da panika nima va uni qachon ushlash mumkin emas?

sobes.tech AI

AIdan javob

Go tilida, panika (panic) — bu dastur davomida yuzaga keladigan kritik xatolarni boshqarish uchun ishlatiladigan mexanizm. Panic chaqirilganda, joriy goroutine bajarilishi to‘xtatiladi va "stack unwinding" (stackni ochish) jarayoni boshlanadi, bu jarayonda defer bilan belgilangan funksiyalar chaqiriladi.

Panikani recover funksiyasi yordamida ushlash mumkin, u defer funksiyasi ichida chaqirilishi kerak. Agar recover defer bo‘lmagan funksiyada chaqirilsa, u panikani ushlay olmaydi.

Ammo, panikani ushlay olmaydigan holatlar ham mavjud:

  • Agar panika asosiy goroutine ichida yuzaga kelib, ushlanmasa, dastur avariya bilan tugaydi.
  • Agar panika tizim chaqiruvlari yoki runtime ichida yuzaga kelib, recover imkoniyatini bermasa.
  • Agar recover defer bo‘lmagan funksiyada chaqirilsa, u dastur tugashini oldini ololmaydi.

Misol:

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Panika ushlandi:", r)
        }
    }()
    panic("narsa noto‘g‘ri ketdi")
}

Bu misolda, panika ushlanadi va boshqariladi, dastur avariya bilan tugamaydi.