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...