Sobes.tech
Junior — Middle

Программаның ишин токтотуучу паника жана критикалык катанын айырмачылыктары кандай?

sobes.tech AI

AIден жооп

Go тилинде, panic — бул программаны иштетүү учурунда ката кетирилгенде активдешкен механизм, мисалы, массив чегинен ашып кетүү же ачык panic() чакыру. panic учурдагы goroutineдун нормалдуу иштешин дароо токтотуп, "stack unwinding" (стекти ачуу) процесси башталат, ал жерде defer менен белгиленген функциялар чакырылат. Эгер panic recover() аркылуу кармалбаса, программа катаны менен аяктайт.

Критикалык каталар, программа иштөөсүн токтотуучу, panic аркылуу келип чыгышы мүмкүн, бирок ошондой эле системалык деңгээлдеги фаталдык каталар (мисалы, сегментация катасы) менен да байланыштуу болушу мүмкүн жана бул каталар коддо иштетилбейт.

Негизги айырмачылыктар:

  • Panic — көзөмөлдөөгө боло турган механизм, ал recover() аркылуу кармалып жана иштетилиши мүмкүн.
  • Критикалык каталар — иштетилбеши мүмкүн, бул программа дароо токтоп, калыбына келтирүү мүмкүнчүлүгү жок калат.

panic жана recover колдонуу мисалы:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Panicтен кийин калыбына келтирүү:", r)
        }
    }()
    panic("эч нерсе туура эмес болуп калды")
}

func main() {
    mayPanic()
    fmt.Println("Программа улантылууда")
}