1. 逆序执行
2. defer声明时会先计算并确定参数的值,推迟的仅仅时函数体内的逻辑
func main() {
b()
}
func a() {
defe un(trace("a")) ///初始化 defer 函数的参数,所以输 trace("a")的 结采
fmt.Println("a的逻辑代码")
}
func b() {
defe un(trace("b"))
fmt.Println("b的逻辑代码")
a()
}
func trace(s string) string {
fmt.Println("开始执行",b)
return s
}
func un(s string) {
fmt.Println("结束执行",s)
return s
}
/*
开始执行b
b的逻辑代码
开始执行a
a的逻辑代码
结束执行a
结束执行b
*/