2019-11-25[Go] 你真的了解defer的执行时机么?
2019-11-25 本文已影响0人
itoocs
引入:Go语言中defer的执行时机你真的理解么?
![](https://img.haomeiwen.com/i7564110/6d485cf38cbe06ac.png)
以上返回值是多少呢?先买个关子,接下来我说下defer的底层执行原理,然后在回答上面的问题。
![](https://img.haomeiwen.com/i7564110/60d40e77ef16a3a8.png)
文章头那个问题返回多少呢?
A:9 B:10
我想大家也应该得到了正确的答案,正确的答案是 A:9
接下来说下多个defer的执行顺序?先注册的后执行,后注册的先执行。
![](https://img.haomeiwen.com/i7564110/cecba5704fd458ff.png)
上面的答案是:
![](https://img.haomeiwen.com/i7564110/372e751e818ab340.png)
接下来在做几道题:
![](https://img.haomeiwen.com/i7564110/5091aadf044fc395.png)
答案是:foo1=5 foo2=6 foo3=5 foo4=5
注意defer的执行时机?
1:返回值赋值 2:defer执行 3: 真正的返回
但是这里要考虑到返回值赋值时值拷贝时,赋值的是值还是指针。
foo1 foo3 foo4都存在局部变量的值拷贝,因此返回值仍然是5,而foo2在defer里面操作的仍然是返回值x,因此返回6
最后在做一个面试题:
![](https://img.haomeiwen.com/i7564110/79d6d6ad2429a05d.png)
提示:defer注册要延迟执行的函数时该函数所有的参数都需要确定其值。
这里答案是多少呢?大家可以在评论中给出幺?
声明:如有侵权,请告知删除