Следующий код:
package main
import (
"fmt"
"strings"
)
var data = []string{
"The yellow fish swims slowly in the water",
"The brown dog barks loudly after a drink ...",
"The dark bird bird of prey lands on a small ...",
}
func main() {
histogram := make(map[string]int)
words := make(chan string)
for _, line := range data {
go func(l string) {
for _, w := range strings.Split(line, " ") {
words <- w
}
}(line)
}
defer close(words)
for w := range words {
histogram[w]++
}
fmt.Println(histogram)
}
оканчивается тупиком:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
/tmp/sandbox780076580/main.go:28 +0x1e0
Насколько я понимаю, слова канала будут блокировать авторов и читателей для достижения некоторой синхронизации.Я пытаюсь использовать один канал для всех goroutines (писателей) и один читатель в основном (с помощью команды «range»).Я пробовал также с буферизованными каналами - подобные сбои.У меня есть проблемы, чтобы понять, почему это не работает.Любые советы для понимания?
Спасибо.