让我们先看一个例子
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)
}
}
这三个值的地址都是一样的!一样的!
解决方法 :用指针或者临时变量