我在争论 goroutine 并让他们与主要 goroutine 上的频道进行交流时遇到了麻烦。为简化起见,我的代码如下所示:
func main() {
channel := make(chan string)
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go performTest(channel, &wg, i)
}
wg.Wait()
close(channel)
for line := range channel {
fmt.Print(line)
}
}
func performTest(channel chan string, wg *sync.WaitGroup, i int) {
defer wg.Done()
// perform some work here
result := fmt.sprintf("Pretend result %d", i)
channel <- result
}
这似乎进入了某种僵局,但我不明白为什么。它卡住了wg.Wait(),即使我希望它在所有 goroutine 都调用Done等待组后继续。我在这里想念什么?我想等待 goroutines,然后遍历通道中的所有结果。
收到一只叮咚
相关分类