Aufschieben von „recover()“ vs. „aufschieben von „recover()““
In Go kann eine Panik mithilfe der Funktion „recover()“ abgefangen und behandelt werden . Es ist jedoch wichtig zu beachten, dass die Platzierung von „defer“ relativ zum Aufruf „recover()“ erhebliche Auswirkungen hat.
Szenario A: defer func() { restart() }()
In diesem Szenario plant die Defer-Anweisung eine anonyme Funktion, die am Ende der aktuellen Funktion ausgeführt wird. Wenn diese Funktion ausgeführt wird, ruft sie die Funktion „recover()“ auf. Dies ist eine effektive Möglichkeit, Paniken abzufangen und zu bewältigen, da die Funktion „recover()“ auch dann ausgeführt wird, wenn eine Panik auftritt, bevor die einschließende Funktion die Ausführung wieder aufnimmt.
Szenario B: Wiederherstellung() aufschieben
In diesem Szenario ist die Funktion „recover()“ selbst als verzögerte Funktion geplant. Dies funktioniert jedoch nicht wie beabsichtigt, da sich „recover()“ nicht selbst aufruft. Daher werden alle Panikzustände, die auftreten, bevor die umschließende Funktion die Ausführung wieder aufnimmt, von diesem verzögerten Aufruf nicht abgefangen.
Dieses Verhalten ist in der Go-Dokumentation dokumentiert: „Wenn die Wiederherstellung außerhalb der verzögerten Funktion aufgerufen wird, wird a nicht gestoppt Paniksequenz.“
Ein interessantes Beispiel: defer (func() { restart() })()
Um dies weiter zu veranschaulichen, betrachten Sie den folgenden Code:
var recover = func() { recover() } defer recover() panic("panic")
Überraschenderweise löst dieser Code auch keine Panik aus. In diesem Fall erstellen wir eine Wiederherstellungsvariable vom Funktionstyp und initialisieren sie mit einer anonymen Funktion, die die integrierte Funktion „recover()“ aufruft. Anschließend geben wir den Wert der Wiederherstellungsvariablen als verzögerte Funktion an. Dadurch können wir die Panik abfangen und bewältigen, da die verzögerte Funktion tatsächlich „recover()“ aufruft und so die Paniksequenz stoppt.
Das obige ist der detaillierte Inhalt vonGo Panic Recovery: „recover()' aufschieben – Was ist der Unterschied?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!