1 回答

TA贡献1946条经验 获得超4个赞
延迟直到 main 返回才执行。结果,范围words
永远阻塞。
要解决此问题,应用程序必须words
在所有 goroutine 完成发送后关闭。一种方法是使用等待组。等待组为每个 goroutine 递增,当 goroutines 退出时递减。另一个 goroutine 在组上等待并关闭通道。
func main() {
histogram := make(map[string]int)
words := make(chan string)
var wg sync.WaitGroup
for _, line := range data {
wg.Add(1)
go func(l string) {
for _, w := range strings.Split(l, " ") {
words <- w
}
wg.Done()
}(line)
}
go func() {
wg.Wait()
close(words)
}()
for w := range words {
histogram[w]++
}
fmt.Println(histogram)
}
奖励修复:问题中的 goroutine 引用了循环变量iine
而不是参数l
。
- 1 回答
- 0 关注
- 104 浏览
添加回答
举报