🤔为什么我的 panic 逃跑了
func action(){
defer func() {
if r := recover(); r != nil {
log.Println("get panic",r)
}
}()
go func(){
time.Sleep(time.Second*10)
panic(1)
}()
fmt.Println("end")
}
可以这样理解,go
的代码和 action
已经是两个世界的东西了。所以即使在主进程也无法捕获。从另一个方面来说,这个方法的 defer 早就已经执行结束了。在fmt.Println("end")
后,就已经执行。所以如果要捕获这个 panic 要在他的父函数或者本函数,而不是主进程。
本作品采用《CC 协议》,转载必须注明作者和本文链接
panic之后会执行当前goroutine下的所有defer