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 關注
- 121 瀏覽
添加回答
舉報