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

相关推荐
缺点内向37 分钟前
C#: 高效移动与删除Excel工作表
开发语言·c#·.net·excel
老前端的功夫1 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
程序员爱钓鱼2 小时前
Python编程实战:面向对象与进阶语法——类型注解与代码规范(PEP 8)
后端·python·ipython
程序员爱钓鱼2 小时前
Python实战:用高德地图API批量获取地址所属街道并写回Excel
后端·python·ipython
Yeats_Liao2 小时前
时序数据库系列(三):InfluxDB数据写入Line Protocol详解
数据库·后端·时序数据库
王元_SmallA2 小时前
Redis Desktop Manager(Redis可视化工具)安装
java·后端
ᐇ9592 小时前
Java HashMap深度解析:数据结构、原理与实战指南
java·开发语言·数据结构
好好研究2 小时前
Spring框架 - 开发方式
java·后端·spring
QT 小鲜肉2 小时前
【个人成长笔记】在 Linux 系统下撰写老化测试脚本以实现自动压测效果(亲测有效)
linux·开发语言·笔记·单片机·压力测试
程序员龙一3 小时前
C++之static_cast关键字
开发语言·c++·static_cast