Golang中defer和return顺序

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

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

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

go 复制代码
package main

import "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

相关推荐
lly2024064 分钟前
抽象工厂模式
开发语言
一只小松许️7 分钟前
Rust切片、结构体、枚举
开发语言·rust
SFLYQ24 分钟前
Go AICode 工具调研
后端
这里有鱼汤34 分钟前
Python模块化开发,从此告别乱糟糟的代码!
前端·后端·python
这里有鱼汤36 分钟前
高手也容易忽略的 Python 命名空间与作用域
前端·后端·python
捡田螺的小男孩37 分钟前
新来的技术总监,把DDD落地的那叫一个高级优雅!
java·后端
陳長生.44 分钟前
JAVA EE_多线程-初阶(二)
java·开发语言·jvm·java-ee
QTX187301 小时前
常见的 JavaScript 框架和库
开发语言·javascript·ecmascript
xiezhr1 小时前
程序员为什么总是加班?
前端·后端·程序员
猿java1 小时前
银行系统需要服务降级吗?
java·后端·面试