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、函数结束"

相关推荐
人间打气筒(Ada)2 分钟前
「码动四季·开源同行」python语言:用户交互
开发语言·python·基本数据类型·注释·变量·常量·文件头
kaikaile199542 分钟前
C# 文件编码转换工具
开发语言·c#
沐雪轻挽萤1 小时前
10. C++17新特性-保证的拷贝消除 (Guaranteed Copy Elision / RVO)
开发语言·c++
Jasper_o1 小时前
MassTransit OutBox 不发送消息问题
后端·.net
掘金码甲哥1 小时前
glm模型这么火,咱们用vllm也咧一个呗
后端
河阿里1 小时前
Java-JWT令牌技术深度指南
java·开发语言
邦爷的AI架构笔记2 小时前
踩坑3天后,我把公司的AI接口全换成了多模型路由——GPT-6和Claude Opus 4.7同时上线的这周
人工智能·后端
文静小土豆2 小时前
Java 应用上 K8s 全指南:从部署到治理的生产级实践
java·开发语言·kubernetes
西西弗Sisyphus2 小时前
Python 在终端里彩色打印
开发语言·python·print·彩色打印
白毛大侠2 小时前
Docker vs 虚拟机 vs Go 用户态/内核态:这三组概念
运维·docker·golang·kvm