为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 golang 无法从 defer 函数调用的函数中的恐慌中恢复

为什么 golang 无法从 defer 函数调用的函数中的恐慌中恢复

Go
慕哥9229398 2022-12-19 21:46:08
package mainimport "fmt"func myRecover() {    if r := recover(); r != nil {        fmt.Println(r)    }}func main() {    defer func() {        myRecover()    }()    panic("The gas price is skyrocketing!")}上面的代码无法以某种方式从恐慌中恢复过来,下面的代码可以。package mainimport "fmt"func main() {    defer func() {        if r := recover(); r != nil {            fmt.Println(r)        }    }()    panic("The gas price is skyrocketing!")}这太令人困惑了。我想知道为什么。
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

规范说:

如果满足以下任何条件,则 recover 的返回值为 nil:

  • ...

  • recover 不是由延迟函数直接调用的。

在第一个示例中,recover延迟函数不直接调用。在这种情况下,recover函数总是返回。nil

您可以myRecover通过直接延迟功能来使用。

func main() {    
    defer myRecover()   
     panic("The gas price is skyrocketing!")
}


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号