Sobes.tech
Junior — Middle

Milyen különbségek vannak a pánik és a kritikus hiba között, amelyek megállítják a program végrehajtását?

sobes.tech MI

Válasz az MI-től

Go nyelven a panic egy mechanizmus, amely kritikus hiba esetén aktiválódik a program futása közben, például egy szelet (slice) határain kívüli hozzáférés vagy explicit panic() hívás esetén. A panic az aktuális goroutine normál végrehajtását azonnal megszakítja, és elindítja a "stack unwinding" (verem kioldás) folyamatát, ahol a defer-rel jelölt függvények hívódnak meg. Ha a panic nem kerül kezelése recover() segítségével, a program hibával ér véget.

Egy kritikus hiba, ami leállítja a program futását, lehet, hogy panic-ből ered, de lehet rendszer szintű fatális hiba (pl. szegmentációs hiba) is, amit nem lehet a kódban kezelni.

Fő különbségek:

  • Panic — egy kontrollált mechanizmus, amit el lehet kapni és kezelni recover()-rel.
  • Kritikus hiba — lehet, hogy nem kezelhető, és azonnali programleállást okoz mentési lehetőség nélkül.

Példa a panic és recover használatára:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Visszaállt panic után:", r)
        }
    }()
    panic("valami rosszul sült el")
}

func main() {
    mayPanic()
    fmt.Println("A program folytatódik")
}