一个关于 go 闭包方法的输出问题
代码如下:
package main
import "fmt"
func main() {
var users [5]int
for i := range users {
defer func() { fmt.Println(i) }()
}
}
爲何輸出的是 4 個 4 呢?爲何不是輸出 4 3 2 1 0 ?
这是
for range
这个语法糖导致的,i 这个值指向的是同一个指针,所以每次循环值都会被覆盖。这样写就是 4 3 2 1 0 了
别偷懒,参数还是要传进去