下面这段代码为什么输出0?defer语句的执行不应该在i++之后吗?
func a() {
i := 0
defer fmt.Println(i)
i++
return
}
defer:
1. 搭配匿名函数的时候且defer使用的变量不是defer匿名函数参数的时候,defer使用的是变量的地址的拷贝。
2. 其它情况都是在定义defer的时候,使用的是变量的值的拷贝
具体可以打印两个i的地址,是不一样的。
#4
更多评论
Go的函数是值传递,defer调用的函数也是一样
关于defer,可以看下这篇 https://studygolang.com/topics/9070
#2