運行時間可以檢測到panic(nil)
並報告錯誤。如何檢測延遲函數Go中的恐慌(無)和正常執行?
但是,我不能recover()
在defer
紅色功能檢測panic(nil)
,因爲它返回nil
,所以我不能正常執行(沒有出現恐慌)區別開來,因爲我會測試 的recover()
返回值是零。
例如,
defer func(){
var err = recover()
if err != nil {
// Real serious situation. Panic from inner code.
// And we may have some critical resources which
// must be cleaned-up at any cases.
// However, this will not be executed for panic(nil)
rollback()
// I am still not sure that how should I treat `panic`…
// Should I just ignore them?
}
}()
var err = doTransaction()
if err == nil {
commit() // Happy case.
} else {
rollback() // Regular execution. Just a lucky case.
}
ROLLBACK只是一個例子,我想我可以有很多危重病例需要清理。那麼,這些清理代碼也不會在真正的程序崩潰時執行,但我想盡可能地進行辯護。
無論延遲函數中的參數如何檢測到任何恐慌?
啊對不清楚的問題抱歉。我想要的是區分'panic(nil)'和'延遲'函數中的正常執行...... – Eonil
也許我可以在退出函數之前設置一個標誌。 – Eonil
感謝您的靈感!我通過設置標誌解決了這個問題。 – Eonil