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

相关推荐
白杨尚青1 小时前
C++进阶篇(二):多态——虚函数、重写、虚函数表与三个经典坑(附完整代码仓库)
开发语言·c++·多态·虚函数·重写·动态绑定
考虑考虑7 小时前
JDK26中的Map.ofLazy
java·后端·java ee
云浪9 小时前
Go 并发实战:从零实现一个高并发安全的任务调度器
javascript·后端·go
苏三的开发日记9 小时前
Docker 启动顺序优化(CentOS / Ubuntu)
后端
高频因子挖掘机11 小时前
同一交易日出现重复 K 线:去重前先确认时间、来源和粒度
后端·github·api
feely020812 小时前
《我写了 31 个静态扫描插件,踩了 7 个「假绿」》
后端
橙子家12 小时前
参数校验类异常(Argument Exception)【C# Exception 详解系列一】
后端
掘金挖土13 小时前
前端手摸手跑路之 AI 应用开发(九)
前端·后端
全栈弄潮儿13 小时前
Python实战第8期:函数
后端·python·编程语言