Sobes.tech
Junior — Middle

Jaké jsou rozdíly mezi panikou a kritickou chybou, která zastavuje běh programu?

sobes.tech AI

Odpověď od AI

V jazyce Go je panic mechanismus, který se aktivuje při kritické chybě během běhu programu, například při přístupu mimo hranice pole nebo při explicitním volání panic(). panic okamžitě ukončí normální běh aktuální gorutiny a spustí proces "rozbalování zásobníku" (stack unwinding), při kterém jsou volány funkce označené defer. Pokud panic není zachycen pomocí recover(), program skončí chybou.

Kritická chyba, která zastaví běh programu, může být způsobena panic, ale také může souviset s fatálními chybami na úrovni systému (například chyba segmentace), které nelze v kódu zpracovat.

Hlavní rozdíly:

  • Panic — řízený mechanismus, který lze zachytit a zpracovat pomocí recover().
  • Kritická chyba — může být nezpracovatelná, což vede k okamžitému ukončení programu bez možnosti zotavení.

Příklad použití panic a recover:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Obnova po panic:", r)
        }
    }()
    panic("něco se pokazilo")
}

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