Sobes.tech
Junior — Middle

Was sind die Unterschiede zwischen Panik und kritischem Fehler, der die Programmausführung stoppt?

sobes.tech KI

Antwort von AI

In Go ist panic ein Mechanismus, der bei kritischen Fehlern während der Programmausführung ausgelöst wird, z.B. bei Zugriff außerhalb der Grenzen eines Slices oder bei explizitem Aufruf von panic(). Ein panic führt dazu, dass die normale Ausführung der aktuellen Goroutine sofort beendet wird und der "Stack-Unwinding"-Prozess beginnt, bei dem defer-Funktionen aufgerufen werden. Wird ein panic nicht mit recover() abgefangen, beendet sich das Programm mit einem Fehler.

Ein kritischer Fehler, der die Programmausführung stoppt, kann durch einen panic verursacht werden, aber auch durch fatale Systemfehler (z.B. Segmentierungsfehler), die im Code nicht behandelt werden können.

Hauptunterschiede:

  • Panic — ein kontrollierter Mechanismus, der abgefangen und mit recover() behandelt werden kann.
  • Kritischer Fehler — kann nicht behandelt werden, was zum sofortigen Programmende ohne Wiederherstellungsmöglichkeiten führt.

Beispiel für die Verwendung von panic und recover:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Wiederhergestellt nach Panic:", r)
        }
    }()
    panic("etwas ist schief gelaufen")
}

func main() {
    mayPanic()
    fmt.Println("Das Programm läuft weiter")
}