panic
- panic 只会触发当前 Goroutine 的延迟函数调用;
- recover 只有在 defer 函数中调用才会生效;
- panic 允许在 defer 中嵌套多次调用;
- panic 之后的代码一定不会执行;
最简单的一个示例,panic 会被 defer 中的 recover 正确捕获,并且程序不会异常退出,而且会继续执行 recover 之后的代码,但是就算捕获到了 panic,在 panic 之后的代码也不会被执行。
func main() {
defer func() {
fmt.Println("recover...", recover())
fmt.Println("after recover...")
}()
panic("panic...")
fmt.Println("after panic...")
}
$ go run main.go
recover... panic...
after recover... 
京公网安备 11010502036488号