🛡️ Go Stabilität & Ressourcen

Go 08: Ressourcensicherheit mit defer, panic & recover

Garantiere saubere Ressourcenbereinigung mit defer (LIFO), verstehe fatale Ausnahmezustände mit panic und fange Laufzeit-Panics elegant mit recover() ab.

🔒 1. Verzögerte Ausführung mit defer

Eine mit defer versehene Anweisung wird garantiert ausgeführt, sobald die umgebende Funktion zurückkehrt (egal ob durch return oder panic):

file, err := os.Open("logfile.txt")
if err != nil {
    return err
}
defer file.Close() // Wird IMMER beim Verlassen der Funktion ausgeführt!

// Mehrere defers werden nach dem LIFO-Prinzip (Stack) ausgeführt:
defer fmt.Println("1. Erster Defer")
defer fmt.Println("2. Zweiter Defer")
defer fmt.Println("3. Dritter Defer")
// Ausgabe beim Return: 3 -> 2 -> 1 (Last-In, First-Out)
🏢 Didaktische Analogie: Das Betreten und Verlassen des Reinraums

Wenn du einen Reinraum betrittst, ziehst du Überschuhe an, dann einen Kittel, dann Handschuhe. Mit defer klebst du an jede Handlung sofort einen Erinnerungszettel: "Beim Rausgehen ablegen". Beim Verlassen ziehst du in exakt umgekehrter Reihenfolge (LIFO) zuerst die Handschuhe, dann den Kittel und zuletzt die Überschuhe aus – garantiert rückstandsfrei!

💥 2. panic vs. recover()

panic signalisiert einen unrettbaren, fatalen Fehler (z.B. Nil-Pointer Dereference oder Out-of-Bounds). Mit recover() innerhalb einer defer-Funktion kann ein solcher Panic abgefangen werden:

func SafeWorker() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("CRASH VERHINDERT! Panic-Grund:", r)
        }
    }()

    // Kritischer Code, der einen Panic auslösen könnte:
    var ptr *int
    *ptr = 42 // Würde normalerweise den Server crashen
}

🎯 Aufgaben & Checkliste in aufgabe.go

💡 Go Pro-Tipp: Panic nicht für gewöhnlichen Kontrollfluss nutzen

Verwende panic niemals als Ersatz für reguläre Fehler. Nutze immer error für erwartbare Probleme und reserviere panic für echte Programmierfehler oder unrettbare Systeminkonsistenzen!

💻 In Web-IDE öffnen → Zurück zum Dashboard →