确切的事情是不可能的.你可能只是想重新恐慌,基本上就像在其他语言中重新抛出异常一样;
defer func() {
if e := recover(); e != nil {
//log and so other stuff
panic(e)
}
}()
Run Code Online (Sandbox Code Playgroud)
您可以设置一个布尔标志,然后在函数体的末尾重置它。如果 defer 内部仍然设置了该标志,则您知道最后一条语句没有执行。唯一可能的原因是该函数出现恐慌。
https://play.golang.org/p/PKeP9s-3tF
func do() {
panicking := true
defer func() {
if panicking {
fmt.Println("recover would return !nil here")
}
}()
doStuff()
panicking = false
}
Run Code Online (Sandbox Code Playgroud)
缺点是增加了维护负担,panicking = false
必须保留为函数体中的最后一条语句。如果函数有多个返回值,则它必须是每次返回之前的最后一条语句。
归档时间: |
|
查看次数: |
1107 次 |
最近记录: |