一个关于 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 ?

讨论数量: 5

这是 for range 这个语法糖导致的,i 这个值指向的是同一个指针,所以每次循环值都会被覆盖。

这样写就是 4 3 2 1 0 了

func main() {
    var users [5]int
    for i := range users {
        defer func(i int) { fmt.Println(i) }(i)
    }
}
2年前 评论
whitek 2年前
滚球兽进化 2年前

别偷懒,参数还是要传进去

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!