go panic/recover 处理错误模式

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")
}