news 2026/6/9 18:48:21

Golang中,defer 的执行顺序是怎样的?defer 的作用是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Golang中,defer 的执行顺序是怎样的?defer 的作用是什么?

在 Go 里面,defer简直是随处可见。最基本的描述就是:它能让函数在返回前执行,而且是“后进先出(LIFO)”。

1. 为什么非要“后进先出”?

defer像栈,所以是反着的。但这只是实现方式,不是设计原因

设计成 LIFO 的本质原因是:资源依赖。

想象一下这个场景:

  1. 你先开了一个数据库连接conn
  2. 紧接着,你基于这个conn开启了一个事务tx

这时候,如果你要释放资源,肯定得先才关事务,再关连接。如果先关了连接,事务的关闭可能就会因为找不到连接而报错。所以,defer必须保证最后注册的资源最先被释放,这样才能安全地拆掉那些有依赖关系的逻辑。

2. return 之后到底发生了什么?

这是最坑人的地方。很多人以为return x就是结束函数了,其实在底层,它被拆成了好几步。

记住这个执行顺序:
1. 赋值:把要返回的值,挪到一个专门放返回值的“小格子”里。
2. 执行 defer:回头去跑那些排好队的defer函数。
3. 走人(RET):带着“小格子”里的东西跳出函数。

这就解释了一个经典问题:
如果你用的是“匿名返回值”(比如func() int),你在defer里怎么改都没用,因为第一步已经把值存好了。
但如果你用的是“命名返回值”(比如func() (res int)),defer里的逻辑是可以直接修改res的,这会直接影响最终结果。

3. 怎么用?

defer它就是一个“保底兜底”的。

  • 成对出现:只要你用了LockOpenConnect,下一行立马写defer UnlockClose。别管中间有多少if err != nil的 return,这行defer就像买了一份保险,雷打不动。
  • Panic 也不怕:就算程序崩了(panic),defer链条依然会执行完。这是你最后捞救数据的机会(配合recover使用)。

4. 避坑

  • 参数是“快照”:你在写defer func(x)的时候,这个x的值在那一刻就被定死了。哪怕后面你改了xdefer跑的时候还是用的老值。
  • 别在长循环里狂写 deferdefer也是要占内存的。如果你在一个跑 100 万次的循环里写defer,这些任务会堆积到循环彻底结束才执行,很容易把内存撑爆。

总结

它通过栈结构解决了资源释放的顺序问题,又通过介入return流程给了我们处理收尾工作的最高权限。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 15:10:44

RuoYi-Vue-Plus企业级开发平台完整使用指南

RuoYi-Vue-Plus企业级开发平台完整使用指南 【免费下载链接】RuoYi-Vue-Plus 项目地址: https://gitcode.com/gh_mirrors/ru/RuoYi-Vue-Plus RuoYi-Vue-Plus是基于Spring Boot 3.4和Vue3的企业级快速开发平台,针对分布式集群与多租户场景进行了全方位升级。…

作者头像 李华
网站建设 2026/6/5 21:21:02

ChromeDriver下载地址整理:自动化测试DDColor Web界面必备

ChromeDriver与ComfyUI集成:实现DDColor Web界面自动化测试 在AI图像修复技术快速发展的今天,如何高效验证前端功能的稳定性已成为开发流程中的关键一环。以DDColor为代表的黑白老照片上色模型,虽然在色彩还原和细节保留方面表现出色&#x…

作者头像 李华
网站建设 2026/6/5 19:33:17

SDR++软件无线电工具实战应用指南

SDR软件无线电工具实战应用指南 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus SDR作为一款跨平台的软件定义无线电应用,通过高效的数字信号处理技术为无线电爱好者提供专业的信号…

作者头像 李华
网站建设 2026/6/7 16:23:00

res-downloader终极指南:跨平台资源嗅探与高效下载全解析

还在为无法下载各大平台的优质内容而苦恼吗?面对视频号、抖音等平台的资源限制,传统下载工具往往束手无策。res-downloader作为一款专业的网络资源嗅探工具,彻底解决了这一痛点。本文将带你从零开始,全面掌握这款跨平台下载利器的…

作者头像 李华
网站建设 2026/6/5 19:48:01

qmc-decoder:3步解锁QMC加密音频的终极免费方案

你是否曾经满怀期待地点开珍藏的音乐文件,却只看到"格式不支持"的冰冷提示?那些被QMC加密技术锁住的音频文件,就像被关在保险箱里的宝藏,看得见却摸不着。今天,这个困扰无数音乐爱好者的难题终于有了完美解决…

作者头像 李华
网站建设 2026/6/5 20:50:39

忘记压缩包密码?这3个步骤帮你快速找回

你是否曾经遇到过这样的情况:急需打开一个加密的压缩文件,却怎么也想不起密码是什么?重要的工作文档、珍贵的照片资料、关键的备份文件,都被一道密码牢牢锁住。别担心,ArchivePasswordTestTool正是为你解决这一难题而生…

作者头像 李华