go func 并不能保证立即执行,在它还没有执行的时候,item值已经被for循环改变了。
正确代码:
package main
import (
"fmt"
"sync"
)
func main() {
var s []string = []string{
"1",
"2",
"3",
}
var waitGroup sync.WaitGroup
waitGroup.Add(len(s))
for _, item := range s {
go func(item string) {
fmt.Println(item)
waitGroup.Done()
}(item)
}
waitGroup.Wait()
}
输出:
1
2
3
错误实例:
for _, item := range s {
go func() {
fmt.Println(item)
waitGroup.Done()
}()
}
输出:
3
3
3