質問:
なぜ defer func() の呼び出しは行われるのでしょうか? ) { reverse() }() はパニック状態の goroutine を正常に回復しましたが、recover() の呼び出しを延期しました。そうでない?
答え:
recover() のドキュメントによると、「recover が遅延関数の外で呼び出された場合、パニックシーケンスを止めない。"
延期の場合recover()、recover()自体は遅延関数です。したがって、それ自体は呼び出されず、パニック シーケンスが継続します。
recover() がそれ自体を遅延関数として呼び出すと、パニック シーケンスが停止します。しかし、これは非論理的です。
興味深いバリエーション:
次のコードもパニックを回避します:
package main func main() { var recover = func() { recover() } defer recover() panic("panic") }
ここでは、組み込みのrecover()関数を呼び出す関数値を持つrecover変数。この変数の値の呼び出しを延期することで、組み込みのrecover()を呼び出し、パニックシーケンスを停止します。
以上が「defer func() { recur() }()」 は成功するのに、「defer Recovery()」 はパニックの捕捉に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。