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

相关推荐
archko几秒前
用rust写了一个桌面app,就不再想用kmp了
开发语言·后端·rust
华仔啊2 分钟前
RabbitMQ 的 6 种工作模式你都掌握了吗?附完整可运行代码
java·后端·rabbitmq
星释5 分钟前
Rust 练习册 109:深入探索列表关系判断
开发语言·后端·rust
lsx2024067 分钟前
Python3 实例
开发语言
老华带你飞16 分钟前
作业管理|基于Java作业管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端
JIngJaneIL17 分钟前
基于Java人力资源管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
星释19 分钟前
Rust 练习册 110:探索倍数之和的数学之美
开发语言·后端·rust
m0_4711996319 分钟前
【JavaScript】forEach 和 map 核心区别(附示例+选型)
开发语言·前端·javascript
fanruitian23 分钟前
springboot-mybatisplus-demo
spring boot·后端·mybatis·mybatisplus
MSTcheng.24 分钟前
【C++】菱形继承为何会引发二义性?虚继承如何破解?
开发语言·c++