defer的执行顺序

我们都知道defer后面的代码是方法代码执行完毕后,按照从后往前的顺序执行,主要用来关闭资源等操作。

但在defer代码有嵌套的时候,情况就不同了。

可以先想一下以下代码的输出

package main

import "fmt"

//defer的执行顺序
func main() {
   print(1)
   defer print(print(11) + print(12))
   defer print(3)
   print(4)
}

func print(i int) int {
   fmt.Println(i)
   return i
}

输出结果:

1
11
12
4
3
23

由此可以见得,先执行的是嵌套的代码。所以使用defer关键字还是比较灵活的。


转载请注明来源

×

喜欢就点赞,疼爱就打赏