`panic` verstehen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 42 von 68.
In Go ist panic eine integrierte Funktion, die für wirklich außergewöhnliche Situationen verwendet wird, in denen dein Programm auf einen nicht behebbaren Fehler stößt und sofort angehalten werden muss. Anders als bei regulären Fehlern, die du auf angemessene Weise behandelst, ist panic für katastrophale Fehler reserviert, die darauf hindeuten, dass etwas grundlegend mit der Logik oder der Umgebung deines Programms nicht stimmt.
Wenn panic aufgerufen wird, stoppt es sofort die normale Ausführung der aktuellen Funktion und beginnt, den Aufrufstapel abzubauen. Dadurch unterscheidet es sich deutlich vom typischen Go-Ansatz, Fehler zurückzugeben, die vom aufrufenden Code behandelt werden können.
Im idiomatischen Go wird panic nur selten verwendet. Die Go-Community bevorzugt ausdrücklich die Fehlerbehandlung durch Rückgabewerte gegenüber einer auf panic basierenden Fehlerbehandlung. Du könntest panic in Situationen begegnen, etwa beim Zugriff auf ein Array außerhalb seiner Grenzen, beim Dereferenzieren eines nil-Zeigers oder wenn eine Bibliothek einen unmöglichen Zustand erkennt, der auf einen Programmierfehler hindeutet.
Die meisten Go-Programme sollten Fehler ordnungsgemäß mithilfe des standardmäßigen error-Interfaces behandeln, über das du gelernt hast. panic sollte nur in Betracht gezogen werden, wenn es wirklich keine vernünftige Möglichkeit gibt, wie dein Programm weiterlaufen kann.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen7Fehlerbehandlung im Detail
Benutzerdefinierte FehlertypenFehler-Wrapping mit `%w`Unwrapping mit `errors.Is`Unwrapping mit `errors.As``panic` verstehen`recover` verwendenZusammenfassung – Sichere Division2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und VerhaltenÜbe selbstständig: Online-Go-Compiler