当前位置: 首页 > news >正文

Golang 中return和defer执行先后顺序

先给出最终结论: 执行return语句 -> 执行defer函数 -> 函数返回

这里可能会有一个疑问, 执行return语句和函数返回难道不是一回事?

Golang语言中函数的return不是原子操作,而是分为了两步:

  1. 返回值赋值
  2. 真正函数返回

Golang语言中,defer函数是在return的两步之间。

对于这个的理解,可以看下面两个示例:

func main() {fmt.Println(test1())	// 1fmt.Println(test2())    // 2
}// 返回值 无变量名
func test1() int {var r intdefer func() {r++fmt.Println("defer r:", r)	// 2}fmt.Println("return r:", r)		// 1return r
}// 返回值 有变量名
func test2() (r int) {defer func() {r++fmt.Println("defer r:", r)	// 2}fmt.Println("return r:", r)		// 1return r
}
http://www.lryc.cn/news/155206.html

相关文章:

  • 业务数据模拟/采集
  • qt day 5
  • Java设计模式之适配器模式
  • 每天一个工业通信协议(3)2023.8.29 (DAP接口)
  • 如何将Word转成PDF?试一下这个转换方法
  • 成都睿趣科技:现在开一家抖音小店还来得及吗
  • 原型链中:为什么Function.proto==Function.prototype?
  • 原生js实现轮播图及无缝滚动
  • MP中的字段还可以利用函数来查询拼接sql
  • 【python爬虫】中央气象局预报—静态网页图像爬取练习
  • 数字孪生城市总体架构进一步迭代更新
  • 通过 Jetbrains GateWay实现Remote Development
  • springboot 集成 lucene
  • Android开机动画
  • vue中使用wow.js
  • 网站edge -- 油猴 -> IDM
  • Android片段
  • iOS实时监控与报警器
  • Git小白入门——上手实操之创建仓库和代码提交
  • JS数组迭代方法实操
  • 基于snat+dnat发布内网K8S及Jenkins+gitlab+Harbor模拟CI/CD的综合项目
  • 时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来
  • java IO流(二) 字符流 缓冲流 原始流与缓冲流性能分析
  • 复现XSS漏洞及分析
  • Vue组件之间传值
  • windows查看端口占用,通过端口找进程号(查找进程号),通过进程号定位应用名(查找应用)(netstat、tasklist)
  • Weblogic SSRF【漏洞复现】
  • 文件读取漏洞复现(Metinfo 6.0.0)
  • 【工程实践】使用git clone 批量下载huggingface模型文件
  • 2020 杭电多校第三场 H Triangle Collision(反射套路 + 绕点旋转 + 矢量