page contents

go defer,多个 defer 的顺序,defer 在什么时机会修改返回值?

轩辕小不懂 发布于 2022-08-09 14:08
阅读 1734
收藏 0
分类:Golang
4047
Nen
Nen
- 程序员

作用:defer延迟函数,释放资源,收尾工作;如释放锁,关闭文件,关闭链接;捕获panic;

避坑指南:defer函数紧跟在资源打开后面,否则defer可能得不到执行,导致内存泄露。

多个 defer 调用顺序是 LIFO(后入先出),defer后的操作可以理解为压入栈中

解析:函数的 return 语句并不是原子级的,实际上 return 语句只代理汇编指令 ret。defer 语句是在返回前执行,所以返回过程是:「设置返回值—>执行defer—>ret」。defer可以修改函数最终返回值,修改时机:有名返回值或者函数返回指针 参考:Go高阶指南07,一文搞懂 defer 实现原理)

请先 登录 后评论