面试题答案
一键面试- 函数
test
的返回值:- 函数
test
的返回值是5
。
- 函数
- 原因:
- 在Go语言中,函数的返回值在执行
return
语句时就已经确定了。当执行到return a
时,会将a
的值(此时a
为5
)复制到返回值的临时变量中。尽管后续defer
函数会修改a
的值,但这并不会影响已经确定的返回值。
- 在Go语言中,函数的返回值在执行
defer
对返回值的影响:defer
语句中的函数会在函数返回之前执行。但是,由于返回值在return
语句执行时就已经确定,defer
中的修改操作不会改变返回值。在这个例子中,defer
函数将a
的值从5
修改为10
,但返回值仍然是5
。如果返回值是命名返回值,情况会有所不同。例如:
package main
import "fmt"
func test() (result int) {
var a = 5
defer func() {
result = result + 5
}()
return a
}
- 在这种情况下,返回值是命名的
result
,defer
函数会修改result
的值,函数最终返回10
。因为这里return a
实际上等同于result = a; return
,defer
函数在return
语句之前执行,所以可以修改result
的值。