我们都知道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关键字还是比较灵活的。
转载请注明来源