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

go panic结束流程

go panic结束流程

Go
慕无忌1623718 2018-09-23 10:46:57
func test_1(){exit:=make(chan struct{}) go func() {     defer close(exit)     defer println("exit")    func(){         defer func() {             println("b:",recover()==nil,recover())         }()        func (){             println("c")            //runtime.Goexit()             panic("panic done")             println("c done")         }()         println("b done")     }()     println("a done") }() <-exit}调用panic后会结束后续的流程,defer可以继续执行,但是println("a done")还是输出了了结果,照理来说panic调用后这部分应该也不能输出的为啥能输出“a done”?
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

使用了recover从恐慌中恢复,而且恢复恐慌的defer被嵌套在内部匿名函数里面了,你可以把这一部分看成是调用的另一个函数,defer会在panic之后执行,由于恢复了恐慌,自然不会影响a done 的输出

查看完整回答
反对 回复 2018-09-23
  • 1 回答
  • 0 关注
  • 843 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信