我有for循环与goroutines。我在循环中创建了打印一个字符串和“我”这是一个int的去例程。我知道字符串,“我”会按照随机顺序打印。但是,“我”没有正确添加,如下所示。五个字符串中的三个或四个字符串的值保持不变,然后跳转到2或1.不应该有随机顺序中的1,2,3,4,5个字符吗?我究竟做错了什么?Golang for循环加入i ++不一致
package main
import (
"fmt"
"sync"
)
func main() {
a := []string{
"apple",
"orange",
"grape",
"peach",
"lemon",
}
wg := sync.WaitGroup{}
wg.Add(len(a))
i := 0
for _, v := range a {
go func(a string) {
fmt.Println(a, i)
i++
wg.Done()
}(v)
}
wg.Wait()
}
结果1:
orange 0
apple 0
lemon 0
peach 2
grape 0
结果2:
lemon 0
grape 0
peach 0
apple 0
orange 1
我的目标(随机顺序)
lemon 2
grape 4
peach 1
apple 0
orange 3
谢谢你向我解释。我听说过一场比赛的情况,但直到现在还不明白。 –