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号