go陷阱之 for 语句中的迭代变量与闭包函数

让我们先看一个例子

func main() {
    data := []string{"one", "two", "three"}

    for _, v := range data {
        go func() {
            fmt.Println(v)
        }()
    }

    time.Sleep(3 * time.Second)
    // 输出 three three three
}

这个陷阱还有很多这种例子,其实主要的原因是这个

package main

import "fmt"

func main() {
    strArr := []string{"aaa", "bbbb", "cccc"}
    for _, v := range strArr {
        fmt.Printf("%p\n", &v)
    }
}

这三个值的地址都是一样的!一样的!

解决方法 :用指针或者临时变量

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容