Golang中defer与return的执行顺序——不易混淆

前言

defer和return是常用的一个点,面试高频,也是实战容易踩坑。先前对他进行过一次学习,理解起来略拗口,但好歹也算是学会了。昨天面IEG时候被面试官拷打,并给出了一些提示,让我对个知识点有了新的认识,于是决定对其进行再一次的学习。

其他一些拗口的说法

先前学习的时候也参考了一些资料,当时的学习博文记录:https://blog.csdn.net/Ws_Te47/article/details/135534791

其中我对return+defer顺序的归纳是:

return并不是原子操作,而是分为:赋值、返回 两个步骤。

加上defer,三者的执行时机则是:赋值、defer、return。

当时参考的资料中的说法主要包括:

所以结论是:第一步先return赋值,第二步再执行defer,第三步执行return返回。

https://juejin.cn/post/7095631673865273352
结论为:return 之后的语句先执行,defer 后的语句后执行

https://learnku.com/articles/42255

当时这样理解下来,虽然也正确,但是说起来异常拗口,并且"return在defer之前执行"与"return赋值、defer、return返回"这两个说法一起理解起来,更容易混...

昨晚面IEG时候,遇到了这个情况。结论说对了,但是面试官却说我解释的不太对,请教了一下他给我的归纳是"return、defer、函数结束"。这样理解下来,感觉的确更舒服很多。

一个便于理解的记法

"return、defer、函数结束"

相关推荐
copyer_xyf3 分钟前
【RAG】向量数据库:milvus
后端·python·agent
铁皮饭盒4 分钟前
Bun 哪比 Node.js 快?
javascript·后端
copyer_xyf18 分钟前
Agent 记忆管理
后端·python·agent
葫芦和十三7 小时前
图解 MongoDB 02|BSON:你以为存的是 JSON,其实是带类型的二进制
后端·mongodb·agent
葫芦和十三7 小时前
图解 MongoDB 01|文档数据库
后端·mongodb·agent
陈随易9 小时前
VSCode的Copilot扩展支持接入DeepSeek,Kimi了!
前端·后端·程序员
我不是外星人10 小时前
有了 Harness Engineering ,真的还需要研发工程师吗?
前端·后端·ai编程
candyTong11 小时前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
Rust研习社13 小时前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
IT_陈寒13 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端