sync.WaitGroup和嵌套循环

我想为迭代嵌套循环添加并发性,但是遇到了麻烦。这个示例使用sync.WaitGroup有什么问题?

originCities := [3]string{"LED", "MOW", "PRS"}

destinationCities := [2]string{"UKT", "AAC"}

wg := &sync.WaitGroup{}

wg.Add(len(originCities) * len(destinationCities))

for _, originIata := range originCities {

for _, destinationIata := range destinationCities {

go func () {

fmt.Println(originIata)

fmt.Println(destinationIata)

wg.Done()

}()

}

}

wg.Wait()

我越来越

PRS AAC PRS AAC PRS AAC PRS AAC PRS AAC PRS AAC

因此,您可能会看到它跳过了两个数组的第一个元素,而仅迭代了最后一个元素。任何想法如何解决此问题?

回答:

这是一个关闭问题。您需要将值传递到循环内的goroutine中,如下所示:

for _, originIata := range originCities {

for _, destinationIata := range destinationCities {

go func (originIata, destinationIata string) {

fmt.Println(originIata)

fmt.Println(destinationIata)

wg.Done()

}(originIata, destinationIata)

}

}

以上是 sync.WaitGroup和嵌套循环 的全部内容, 来源链接: utcz.com/qa/403587.html

回到顶部