实践出真理

  1. package main
  2. import (
  3. "io"
  4. "log"
  5. "os"
  6. )
  7. // defer 执行顺序
  8. func execOrder() int {
  9. defer log.Println("execOrder defer 1")
  10. defer log.Println("execOrder defer 2")
  11. return retunrFunc()
  12. }
  13. // 多个 defer 的执行顺序
  14. func multiOrderExec() {
  15. defer log.Println("multiOrderExec defer 我是最后执行的")
  16. log.Println("print 1")
  17. log.Println("print 2")
  18. }
  19. func retunrFunc() int {
  20. log.Println("测试 return 和 defer 哪个先执行, 结果是 return 先执行")
  21. return 0
  22. }
  23. func main() {
  24. log.SetOutput(io.MultiWriter(os.Stdout))
  25. log.SetFlags(log.Lshortfile)
  26. execOrder()
  27. multiOrderExec()
  28. }

返回

  1. main.go:28: 测试 return defer 哪个先执行, 结果是 return 先执行
  2. main.go:15: execOrder defer 2
  3. main.go:15: execOrder defer 1
  4. main.go:23: print 1
  5. main.go:24: print 2
  6. main.go:25: multiOrderExec defer 我是最后执行的