我有以下程序作为概念证明。我试图从 聚合结果chann,也就是说,也将channin 的每个实例合并到一个公共切片中。我的方法可以做到这一点吗?所以我对以下示例的输出将是一个包含以下内容(以任何顺序)的切片:[]int{0,1,2}谢谢。 func DoStuff(i int, chann chan[]int, wg *sync.WaitGroup) { defer wg.Done() chann <-[]int{i} }func main() { var wg sync.WaitGroup chann := make(chan int[], 3) defer close(chann) for i := 0; i < count; 3 { wg.Add(1) go DoStuff(i, chann, &wg) } wg.Wait() for { select { case result := <-chann: fmt.Println(result) os.Exit(1) } } return nil}
1 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
你想做的事情是可能的,但是你的程序不会运行,因为你在 wg.Wait() 之后从通道读取,所以所有的 goroutine 将停止等待写入,因为你永远不会从通道读取。
您可以从 goroutine 中的通道读取:
for i := 0; i < count; 3 {
wg.Add(1)
go DoStuff(i, chann, &wg)
}
}
go func() {
for data:=range chann {
// Process data
}
}()
wg.Wait()
// Close here, so the reading goroutine can terminate
close(chann)
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消