2019-11-25[Go] 你真的了解defer的执行时机么?

2019-11-25  本文已影响0人  itoocs

引入:Go语言中defer的执行时机你真的理解么?

1.png

以上返回值是多少呢?先买个关子,接下来我说下defer的底层执行原理,然后在回答上面的问题。

2.png

文章头那个问题返回多少呢?
A:9 B:10
我想大家也应该得到了正确的答案,正确的答案是 A:9

接下来说下多个defer的执行顺序?先注册的后执行,后注册的先执行。


3.png

上面的答案是:


4.png

接下来在做几道题:


5.png

答案是:foo1=5 foo2=6 foo3=5 foo4=5
注意defer的执行时机?
1:返回值赋值 2:defer执行 3: 真正的返回

但是这里要考虑到返回值赋值时值拷贝时,赋值的是值还是指针。
foo1 foo3 foo4都存在局部变量的值拷贝,因此返回值仍然是5,而foo2在defer里面操作的仍然是返回值x,因此返回6

最后在做一个面试题:


6.png

提示:defer注册要延迟执行的函数时该函数所有的参数都需要确定其值。
这里答案是多少呢?大家可以在评论中给出幺?

声明:如有侵权,请告知删除

上一篇 下一篇

猜你喜欢

热点阅读