エラーを「再スロー」しrecover
て、元のスタック トレースを保持することは可能ですか? 私が知っている最善の方法は、再びパニックに陥ることですが、それによって新しいスタックトレースが作成されます。
func do() {
defer func() {
cleanUp()
if x := recover(); x != nil {
handleError()
panic(x)
}
}()
doStuff()
}
これを望む動機は、関数が正常に終了するかhandleError
実行されない限り、プログラムがデッドロックすることです。そして、元のストラックの痕跡を保存しない限り、どこでクラッシュしたのかわかりません。