插件窝 干货文章 Go语言中defer和return的执行顺序是怎样的?

Go语言中defer和return的执行顺序是怎样的?

返回 函数 执行 语句 423    来源:    2025-03-13

在Go语言中,deferreturn 的执行顺序是一个常见的面试题,也是理解Go语言函数执行流程的关键点之一。具体来说,它们的执行顺序如下:

1. 返回值赋值

首先,return 语句会先计算返回值,并将返回值赋值给函数的返回变量(如果有命名返回值的话)。

2. 执行 defer 语句

接着,defer 语句会在函数返回之前执行。也就是说,defer 语句会在 return 语句执行之后,但在函数真正返回之前执行。

3. 函数返回

最后,函数才会真正返回,将之前计算好的返回值返回给调用者。

示例代码

package main

import "fmt"

func main() {
    fmt.Println(test())
}

func test() (result int) {
    defer func() {
        result++
    }()
    return 1
}

解释

  1. 返回值赋值return 1 会将 1 赋值给 result
  2. 执行 defer 语句defer 语句中的匿名函数会执行,result 的值会从 1 增加到 2
  3. 函数返回:最终函数返回 2

输出结果

2

总结

  • return 语句会先计算返回值并赋值给返回变量。
  • defer 语句会在 return 之后、函数返回之前执行。
  • 如果 defer 修改了返回值,那么最终返回的值会是修改后的值。

这种机制使得 defer 非常适合用于资源释放、日志记录等需要在函数结束时执行的操作。