Die Frage:
Warum funktioniert ein Aufruf zur Verzögerung von func( ) { Recovery() }() hat eine in Panik geratene Goroutine erfolgreich wiederhergestellt, aber ein Aufruf zum Aufschieben von Recovery() nicht?
Die Antwort:
Gemäß der Dokumentation von „recover()“ heißt es: „Wenn die Wiederherstellung außerhalb der verzögerten Funktion aufgerufen wird, wird dies der Fall sein nicht stoppt eine in Panik geratene Sequenz verzögerte Funktion. Daher ruft es sich nicht selbst auf, was zu einer fortgesetzten Paniksequenz führt.
Wenn „recover()“ sich selbst als verzögerte Funktion aufrufen würde, würde dies die Paniksequenz stoppen. Dies wäre jedoch unlogisch.
Eine interessante Variante:Der folgende Code vermeidet auch eine Panik:
Hier erstellen wir eine Wiederherstellungsvariable mit einem Funktionswert, der die integrierte Funktion „recover()“ aufruft. Indem wir den Aufruf auf den Wert dieser Variablen verzögern, rufen wir die integrierte Funktion „recover()“ auf, die dann die Panicing-Sequenz stoppt.package main func main() { var recover = func() { recover() } defer recover() panic("panic") }
Das obige ist der detaillierte Inhalt vonWarum kann „defer restart()' Paniken nicht abfangen, während „defer func() { restart() }()' erfolgreich ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!