panic 可以在任何地方引发,但是只有在 defer
调用的函数中有效
// main.go
package main
import "fmt"
func main() {
A()
B()
C()
}
func A() {
fmt.Println("func A")
}
func B() {
//defer 需要在panic之前
defer func() {
if err := recover(); err != nil {
fmt.Println("Recover in B")
}
}()
panic("Panic in B")
}
func C() {
fmt.Println("func C")
}