Heim > Backend-Entwicklung > Golang > Können Sie während einer bestehenden Panik in Golang innerhalb einer Verzögerungsfunktion in Panik geraten?

Können Sie während einer bestehenden Panik in Golang innerhalb einer Verzögerungsfunktion in Panik geraten?

Susan Sarandon
Freigeben: 2024-11-02 12:03:03
Original
437 Leute haben es durchsucht

Can You Panic Within a Defer Function During an Existing Panic in Golang?

Ist es akzeptabel, innerhalb von Verzögerungsfunktionen in Panik zu geraten, insbesondere wenn bereits eine Panik auftritt?

Kontext:

In der bereitgestellte Code:

<code class="go">func sub(){
    defer func (){
        panic(2)
    }()
    panic(1)
}

func main(){
    defer func(){
        x:=recover()
        println(x.(int));
    }()
    sub()
}</code>
Nach dem Login kopieren

Es scheint, dass die erste Panik (Panic(1)) durch die zweite Panik (Panic(2)) „überschrieben“ wird.

Ist Ist es akzeptabel?

In Golang stellt Panik aufgrund einer verzögerten Funktion keinen besonderen oder außergewöhnlichen Zustand dar. Es zeigt lediglich an, dass die Paniksequenz bestehen bleibt.

Wie im Beispielcode gezeigt, ist es zulässig, eine Golang-Funktion aufzurufen, die innerhalb einer Verzögerungsfunktion in Panik geraten könnte. Selbst wenn bereits eine Panik auftritt, ist es akzeptabel, innerhalb einer Verzögerungsfunktion in Panik zu geraten.

Mechanismus:

Gemäß der Go-Spezifikation:

„Wenn D normal zurückkehrt, ohne eine neue Panik auszulösen, stoppt die Paniksequenz.“

Im Beispiel kehrt die verzögerte Funktion (D) zurück, ohne eine neue Panik auszulösen. Daher wird die durch panic(1) eingeleitete Paniksequenz angehalten.

Zusätzliche Überlegungen:

  • Alle verzögerten Funktionen werden ausgeführt, unabhängig davon, ob sie Panik verursachen .
  • Eine Panik innerhalb einer verzögerten Funktion „umhüllt“ die bestehende Panik, anstatt sie zu „überschreiben“. Recovery() kann jedoch nur den an die letzte Panic() übergebenen Wert abrufen.
  • Es ist möglich, die an mehrere Panics übergebenen Werte wiederherzustellen und zu verarbeiten, indem verzögerte Funktionen mit Recovery() verschachtelt werden.

Das obige ist der detaillierte Inhalt vonKönnen Sie während einer bestehenden Panik in Golang innerhalb einer Verzögerungsfunktion in Panik geraten?. 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