Sobes.tech
Junior — Middle

Aké sú rozdiely medzi panikou a kritickou chybou, ktorá zastavuje vykonávanie programu?

sobes.tech AI

Odpoveď od AI

V jazyku Go je panic mechanizmus, ktorý sa aktivuje pri kritickej chybe počas behu programu, napríklad pri prístupe mimo hranice poľa alebo pri explicitnom volaní panic(). panic spôsobí okamžité ukončenie bežného vykonávania aktuálnej gorutiny a začne proces "rozbalovania" zásobníka (stack unwinding), pri ktorom sú volané funkcie označené defer. Ak panic nie je zachytený pomocou recover(), program skončí chybou.

Kritická chyba, ktorá zastaví vykonávanie programu, môže byť spôsobená panic, ale môže byť tiež spojená s fatálnymi chybami na úrovni systému (napríklad chyba segmentácie), ktoré nie je možné spracovať v kóde.

Hlavné rozdiely:

  • Panic — riadený mechanizmus, ktorý je možné zachytiť a spracovať pomocou recover().
  • Kritická chyba — môže byť nezvládnuteľná, čo vedie k okamžitému ukončeniu programu bez možnosti zotavenia.

Príklad použitia panic a recover:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Obnova po panic:", r)
        }
    }()
    panic("niečo sa pokazilo")
}

func main() {
    mayPanic()
    fmt.Println("Program pokračuje")
}