实践出真理
package main
import (
"io"
"log"
"os"
)
// defer 执行顺序
func execOrder() int {
defer log.Println("execOrder defer 1")
defer log.Println("execOrder defer 2")
return retunrFunc()
}
// 多个 defer 的执行顺序
func multiOrderExec() {
defer log.Println("multiOrderExec defer 我是最后执行的")
log.Println("print 1")
log.Println("print 2")
}
func retunrFunc() int {
log.Println("测试 return 和 defer 哪个先执行, 结果是 return 先执行")
return 0
}
func main() {
log.SetOutput(io.MultiWriter(os.Stdout))
log.SetFlags(log.Lshortfile)
execOrder()
multiOrderExec()
}
返回
main.go:28: 测试 return 和 defer 哪个先执行, 结果是 return 先执行
main.go:15: execOrder defer 2
main.go:15: execOrder defer 1
main.go:23: print 1
main.go:24: print 2
main.go:25: multiOrderExec defer 我是最后执行的