package mainimport "fmt"func main() {defer func() {fmt.Println("defer start")if err := recover(); err != nil {fmt.Println(err)}fmt.Println("defer end")}()A()B()C()fmt.Println("main end")}func A() {defer fmt.Println("A 1")defer fmt.Println("A 2")fmt.Println("A 3")returnfmt.Println("A 4")defer fmt.Println("A 5")}func B() {fmt.Println("B 1")panic("now is panic!")fmt.Println("B 2")}func C() {fmt.Println("C 1")}
最后的总结:
- 函数内部defer执行顺序先进后出
- return后defer等不生效
- 捕捉panic后不向下执行程序,main函数退出
