コンテキスト:
In提供されたコード:
<code class="go">func sub(){ defer func (){ panic(2) }() panic(1) } func main(){ defer func(){ x:=recover() println(x.(int)); }() sub() }</code>
と表示されます最初のパニック (panic(1)) が 2 番目のパニック (panic(2)) によって「上書き」されること。
それは受け入れられますか?
Golang では、遅延関数によるパニックは、明確なまたは例外的な状態を構成しません。これは、単にパニック シーケンスが継続することを示しています。
コード例で示したように、defer 関数内でパニックする可能性のある Golang 関数を呼び出すことが許可されます。パニックがすでに発生している場合でも、遅延関数内でパニックを発生させることができます。
メカニズム:
Go の仕様によると:
「新しいパニックを開始せずに D が正常に戻ると、パニック シーケンスは停止します。」
この例では、遅延関数 (D) は、新たなパニックを引き起こすことなく戻ります。したがって、panic(1) によって開始されたパニック シーケンスは停止します。
追加の考慮事項:
以上がGolang の既存のパニック中に Defer 関数内でパニックを起こすことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。