我正在尝试通过密钥在地图中覆盖频道。 这是地图:
documentChansPerHost := make(map[string](chan Document))
这就是我想要的范围:
wg := sync.WaitGroup{}
documentsCountPerHost := make(map[string]int)
// Count documents per host
for _,document := range documents {
documentsCountPerHost[document.Host]++
}
// Spawn routines for up to 5 times the number of different
for host,documentCount := range documentsCountPerHost {
println("Spawning " + strconv.Itoa(HOST_CONCURRENCY_LIMIT) + " Routines for Host " + host + " for " + strconv.Itoa(documentCount) + " url(s)")
for i := 0; i < HOST_CONCURRENCY_LIMIT; i++ {
go func() {
for document := range documentChansPerHost[host] {
fmt.Println(document.Url)
wg.Done()
}
}
}
}
这就是我创建,添加和关闭(到)频道的方式
// Instantiate channels for documents per host
for host,_ := range documentsCountPerHost {
documentChansPerHost[host] = make(chan Document, 20)
}
for _, document:= range documents {
wg.Add(1)
documentChansPerHost[document.Host] <- document
}
for _, documentChan := range documentChansPerHost {
close(documentChan)
}
wg.Wait()
但由于某种原因,它没有输出我传递到频道的所有文件Urls,程序永远不会结束。我是以错误的方式使用频道映射还是在某处与并发和锁定有关?