Heim > Backend-Entwicklung > Golang > Go Panic Recovery: „recover()' aufschieben – Was ist der Unterschied?

Go Panic Recovery: „recover()' aufschieben – Was ist der Unterschied?

Patricia Arquette
Freigeben: 2024-12-03 03:35:11
Original
553 Leute haben es durchsucht

Go Panic Recovery: Deferring `recover()` – What's the Difference?

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")
Nach dem Login kopieren

Ü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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage