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