1. 逆序执行

2. defer声明时会先计算并确定参数的值,推迟的仅仅时函数体内的逻辑

  1. func main() {
  2. b()
  3. }
  4. func a() {
  5. defe un(trace("a")) ///初始化 defer 函数的参数,所以输 trace("a")的 结采
  6. fmt.Println("a的逻辑代码")
  7. }
  8. func b() {
  9. defe un(trace"b"))
  10. fmt.Println("b的逻辑代码")
  11. a()
  12. }
  13. func trace(s string) string {
  14. fmt.Println("开始执行",b)
  15. return s
  16. }
  17. func un(s string) {
  18. fmt.Println("结束执行",s)
  19. return s
  20. }
  21. /*
  22. 开始执行b
  23. b的逻辑代码
  24. 开始执行a
  25. a的逻辑代码
  26. 结束执行a
  27. 结束执行b
  28. */