go 运行时可以检测panic(nil)并报告错误。
但是,我无法在红色函数中检测panic(nil)with recover(),defer因为它返回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 只是一个例子,我想我可以有很多关键情况需要清理。好吧,那些清理代码也不会在真正的程序崩溃时执行,但我想尽可能地进行辩护。
无论延迟函数中的参数如何,如何检测任何恐慌?
明月笑刀无情
白衣染霜花
相关分类