目录

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()
    }()
}