Sobes.tech
Senior

Go tilida panic nima va u qanday xatordan farq qiladi? Panic ni qanday ushlash mumkin?

sobes.tech AI

AIdan javob

Go tilida, panic — bu kritik xatolarni boshqarish uchun ishlatiladigan mexanizm bo‘lib, odatda, dastur bajarilishi to‘xtatiladi. Panic hozirgi goroutine’ni darhol tugatadi va "stack unwinding" jarayonini boshlaydi, bu jarayonda defer bilan belgilangan funksiyalar chaqiriladi.

Xatodan farqi:

  • Xato (error) — odatiy qiymat bo‘lib, funksiyadan qaytariladi va odatiy tarzda ishlov berilishi mumkin.
  • Panic — muammo haqida favqulodda signal bo‘lib, odatda, odatiy ishlov berishga mo‘ljallanmagan.

Panic’ni ushlash va dasturning yiqilishini oldini olish uchun recover() funksiyasi ishlatiladi, uni defer ichida chaqirish mumkin. Agar recover() stack unwinding jarayonida chaqirilsa, u panic qiymatini qaytaradi va uning tarqalishini to‘xtatadi.

Misol:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Panic ushlandi:", r)
        }
    }()

    panic("narsa noto‘g‘ri ketdi")
}

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