MST

星途 面试题库

面试题:Go的defer与函数返回值的关系

在Go语言中,考虑如下代码:func test() int { var i int defer func() { i++ }() return i },请分析该函数返回值是多少,并解释defer语句与函数返回值之间的作用机制。
20.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 函数返回值
    • 该函数 test 的返回值是 0
  2. defer语句与函数返回值作用机制分析
    • 在Go语言中,return 语句并不是原子操作。它实际分为两步:
      • 第一步,计算返回值。在 func test() int { var i int defer func() { i++ }() return i } 中,当执行到 return i 时,会先计算返回值,此时 i 的值为 0,这个 0 就被确定为返回值。
      • 第二步,执行 defer 语句。defer 语句会在函数返回前执行,在这个例子中,defer 中的匿名函数 func() { i++ }() 会在返回前执行,i 的值变为 1。但是此时返回值已经在第一步被确定为 0i 的后续修改并不会影响已经确定的返回值,所以最终函数返回 0