引入: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注册要延迟执行的函数时该函数所有的参数都需要确定其值。
这里答案是多少呢?大家可以在评论中给出幺?
声明:如有侵权,请告知删除
网友评论