golang panic recover不生效的一个原因

前言:笔者遇到不确定性panic,暂未确定原因,所以通过recover()暂时屏蔽,并打印信息定位
代码存在无法运行到的地方,查看了recover的规则:“程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作”

所以,如果是通过go f()调用panic,recover放到goroutine外面的话,不在同一个goroutine,自然也就无法reached了

错误示范:

func test() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("panic")
        }
    go f()
}

应该:

func test() {
    go func() {
        defer func() {
            if err := recover(); err != nil {
                fmt.Println("panic")
            }
        f()
    }()
}

0 条评论

What is 15 + 6 ?
Please leave these two fields as-is:
不答对这道小题,是不给通过的哦

昵称

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

沙发空缺中,还不快抢~