运行一下代码查看输出情况:
func main() {
tests1ice := []int{1, 2, 3, 4, 5}
for _, v := range tests1ice {
go func() {
fmt.Println(v)
}()
}
time.Sleep(time.Millisecond)
}
打印结果会是五个相同的值。
如果想逐个取出切片的元素,需要强制使用传值的方法,将代码书写成以下方式:
func main() {
tests1ice := []int{1, 2, 3, 4, 5}
for _, v := range tests1ice {
go func(v int) {
fmt.Println(v)
}(v)
}
time.Sleep(time.Millisecond)
}
也可以这样处理:
func main() {
data := []string{"one", "two", "three"}
for _, v := range data {
vCopy := v
go func() {
fmt.Println(vCopy)
}()
}
time.Sleep(3 * time.Second)
// 输出 one two three
}