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