实践出真理
package mainimport ( "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 2main.go:15: execOrder defer 1main.go:23: print 1main.go:24: print 2main.go:25: multiOrderExec defer 我是最后执行的