在godoc(https://blog.golang.org/defer-panic-and-recover)中,有一个例子:
所以我很困惑,为什么第二个例子没有输出
- 延迟函数可以读取和赋值给返回函数的命名返回值。
在这个例子中,一个延迟函数在周围函数返回后增加了返回值i。 因此,该函数返回2:
func c() (i int) {
defer func() { i++ }()
return i
}
我还写了一个小程序:
package main
import "fmt"
func b() int {
i := 0
for ; i < 4; i++ {
defer func() {fmt.Println(i); i++} ()
}
return i
}
func main() {
fmt.Println("result = ", b())
}
输出结果为:
4
5
6
7
result = 4
所以我很困惑,为什么第二个例子没有输出
8
?