2020-10-19:golang里defer为什么要逆序执行?顺序执行不是更符合人的习惯吗?

福大大架构师每日一题 2020-10-19 07:06:47
2020-10-19:golang里defer为什么要逆序执行?顺序执行不是更符合人的习惯吗?#福大大架构师每日一题#
...全文
2555 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2020-10-19
  • 打赏
  • 举报
回复
defer语句是go语言提供的一种用于注册延迟调用的机制,它可以让函数在当前函数执行完毕后执行。它的实现是将defer 语句及参数压入堆栈,所以是逆序执行。
qybao 2020-10-19
  • 打赏
  • 举报
回复
顺序执行就不需要defer了,直接顺序执行到最右再执行defer的函数不就好了吗?
所以,defer就是怕有人顺序执行时到最后忘了执行defer该做的处理,于是就把该做处理提到前面,用个defer来控制再最后才执行,这样每层defer都满足该层的defer控制(每层的最后调defer),于是最里层的defer就会先调用,然后再外层的defer调用,依次一层层向外,直到最外层的defer最后调用。
KeepSayingNo 2020-10-19
  • 打赏
  • 举报
回复
因为它的结构是栈,用的FILO,所以会是逆序
韩_师兄 2020-10-19
  • 打赏
  • 举报
回复
defer一般用来释放资源的,因果关系上后分配的资源可能会依赖前面的资源,如果先释放被依赖的资源就会出现问题。所以倒过来执行不会破坏依赖关系.
  • 打赏
  • 举报
回复
后面定义的函数可能会依赖前面的资源,所以要先执行。如果前面先执行,释放掉这个依赖,那后面的函数就不能找到它的依赖了。

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧