老师在课程中举例如下:
func handle() int {
x := 10
defer func() {
x++
}()
return x
}
func main() {
fmt.Println(handle())
}
执行这段代码,打印的结果是 10。这没有问题,老师解释了这是因为 x 是值类型,而在 return 之前会临时保存 x 的值。
但是如果我把代码的handle
函数稍微改一下,结果就不一样了, 代码如下:
func handle() (x int) {
x = 10
defer func() {
x++
}()
return x
}
其实就是把变量 x 的定义放到了返回值列表中。就导致了 return x 的值变成了 11,而不是上面示例中的 10。这是为什么呢?
我想它肯定不是因为值类型或者引用类型的缘故,因为此时 x 仍然是值类型,所以我就不明白了,还望老师能够给予解答。十分感谢!!!