package main
import "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")
return
fmt.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")
}
执行结果:
A 3
A 2
A 1
B 1
defer start
now is panic!
defer end
总结:
1、函数内部defer执行顺序先进后出
2、return后defer等不生效
3、捕捉panic后不向下执行程序,main函数退出