社区
Java
帖子详情
2020-10-19:golang里defer为什么要逆序执行?顺序执行不是更符合人的习惯吗?
福大大架构师每日一题
2020-10-19 07:06:47
2020-10-19:golang里defer为什么要逆序执行?顺序执行不是更符合人的习惯吗?#福大大架构师每日一题#
...全文
2555
5
打赏
收藏
2020-10-19:golang里defer为什么要逆序执行?顺序执行不是更符合人的习惯吗?
2020-10-19:golang里defer为什么要逆序执行?顺序执行不是更符合人的习惯吗?#福大大架构师每日一题#
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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一般用来释放资源的,因果关系上后分配的资源可能会依赖前面的资源,如果先释放被依赖的资源就会出现问题。所以倒过来执行不会破坏依赖关系.
福大大架构师每日一题
2020-10-19
打赏
举报
回复
后面定义的函数可能会依赖前面的资源,所以要先执行。如果前面先执行,释放掉这个依赖,那后面的函数就不能找到它的依赖了。
2020
-11-
19
:go中,
def
er
原理是什么?
福哥答案
2020
-11-
19
: 什么是
def
er
def
er
是go语言提供的一种用于注册延迟调用的机制:让函数或者语句在当前函数
执行
完毕(包括return正常结束或者panic导致的异常结束)之后
执行
。
def
er
语句通常用于一些成对的操作场景,打开/关闭连接,加锁/解锁,打开文件/关闭文件等等
def
er
在一些需要回收资源的场景中非常有用 为什么需要
def
er
有效防止内存泄漏
def
er
底层原理 每次
def
er
语句在
执行
的时候,都会将函数进行“压栈”,函数参数会被拷贝下来。当外层函数
golang
的
def
er
的理解-
def
er
的函数一定会
执行
吗?
go语言中
def
er
可以完成延迟功能,当前函数
执行
完成后再
执行
def
er
的代码块。通过
def
er
,我们可以在代码中优雅的关闭/清理代码中所使用的变量。
golang
:
def
er
执行
顺序
def
er
类似栈,是
逆序
执行
的, 当发生panic时,先
执行
完前面的所有
def
er
,最后才panic. 示例代码: 运行结果:
Golang
中
def
er
、return、返回值之间
执行
顺序
的坑
文章目录前言结论如何解释两种结果的不同:补充 前言 Go语言中延迟函数
def
er
充当着 try…catch 的重任,使用起来也非常简便,然而在实际应用中,很多goph
er
并没有真正搞明白
def
er
、return和返回值之间的
执行
顺序
,从而掉进坑中,今天我们就来揭开它的神秘面纱! 先来运行下面两段代码: A. 匿名返回值的情况 package main import ( "fmt" ) func main() { fmt.Println("a return:", a()) // 打印结果为 a ret
golang
中
def
er
语句使用小结
def
er
是Go语言中的延迟
执行
语句,用来添加函数结束时
执行
的代码,常用于释放某些已分配的资源、关闭数据库连接、断开socket连接、解锁一个加锁的资源。语句,C++语言
里
的析构函数(Destructor)可以起类似的作用,C++语言机制担保在对象被销毁前一定会
执行
析构函数中的代码。C++中的析构函数析构的是对象,Go中的
def
er
析构的是函数。上述代码打印出来的值是:11。Go中的panic类似其它语言中的抛出异常,panic后面的代码不再
执行
(panic语句前面的
def
er
语句会被
执行
)。
Java
50,503
社区成员
85,598
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章