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

Golang中defer和return顺序

在Golang中,deferreturn 的执行顺序是一个重要的特性,它们的执行顺序如下:

  1. return语句不是一条单独的语句,实际上,它是由赋值和返回两部分组成的。赋值步骤会先执行,这一步会计算return语句中的表达式,然后赋值给返回值。
  2. defer语句在函数返回前(即return语句后的返回动作执行前)执行。如果有多个defer语句,那么它们会以LIFO(后进先出,即栈)的顺序执行。
  3. 返回动作,这是return语句的第二部分,这一步会携带返回值返回到调用函数。

所以,如果你在一个函数中写入了deferreturn,那么它们的执行顺序是:先执行return语句的赋值部分,然后执行defer语句,最后执行return语句的返回动作。

package mainimport "fmt"func foo() (result int) {defer func() {// 修改返回值result++}()return 0 // return语句的赋值部分先执行,然后执行defer,最后执行return的返回动作
}func main() {fmt.Println("Final result:", foo())
}

输出结果为:

在这里插入图片描述

在这个例子中,函数foo会返回1,而不是0。因为return 0是先赋值result0,然后defer函数把result增加了1,最后返回result,所以返回值是1

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

相关文章:

  • LabVIEW幅频特性测试系统
  • 前端工程化08-新的包管理工具pnpm
  • python系列30:各种爬虫技术总结
  • MySQL增删改查
  • Java Nio核心概念理解
  • 关于 Mybatis 的开启二级缓存返回对象不一致问题
  • 嵌入式PCB制图面试题及参考答案(2万字长文)
  • 【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例应用
  • 【2024德国签证】去德国读博士需要申请什么签证?
  • Spire.PDF for .NET【文档操作】演示:以特定的缩放比例/百分比打开 PDF 文件
  • 力扣习题--哈沙德数
  • Redis Stream Redisson Stream
  • Cube-Studio:开源大模型全链路一站式中台
  • 千益畅行,旅游卡,如何赚钱?
  • 【区块链+基础设施】国家健康医疗大数据科创平台 | FISCO BCOS应用案例
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • egg(89)--egg之redis的发布和订阅
  • Iterator 和 for...of 循环
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Magento 1.x 中文订单打印乱码
  • php ci框架整合银盛支付
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SOFAMosn配置模型
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SpringCloud集成分布式事务LCN (一)
  • Swift 中的尾递归和蹦床
  • ubuntu 下nginx安装 并支持https协议
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 前端攻城师
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 什么是Javascript函数节流?
  • 思维导图—你不知道的JavaScript中卷
  • 算法之不定期更新(一)(2018-04-12)
  • 微信小程序开发问题汇总
  • Mac 上flink的安装与启动
  • !$boo在php中什么意思,php前戏
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (2)STL算法之元素计数
  • (2)空速传感器
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (6)STL算法之转换
  • (day6) 319. 灯泡开关
  • (ZT)出版业改革:该死的死,该生的生
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (全注解开发)学习Spring-MVC的第三天
  • (三) diretfbrc详解
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net wcf memory gates checking failed
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net后端程序发布到nignx上,通过nginx访问
  • .Net中的集合