【发布时间】:2020-06-01 20:56:49
【问题描述】:
我有以下程序作为概念证明。我正在尝试聚合来自chann 的结果,也就是说,也将chann 的每个实例合并到一个公共切片中。我的方法可以做到这一点吗?
因此,我对以下示例的输出将是一个包含以下内容(按任意顺序)的切片:[]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
}
【问题讨论】:
-
请尝试发布无需更改即可在本地运行的有效 go 代码。 (或者更好的是,添加一个指向 Go 的游乐场的链接)。在您的问题上,将所有切片合并为一个切片感觉很奇怪。有什么具体原因吗?在您决定切断并发送切片之前,您将等待多长时间?为您的用例简单地
chan int是不是一个糟糕的主意? -
谢谢@TarunKhandelwal 老实说,我对堆栈溢出有点生疏了。我将创建一个游乐场。该例程基本上会执行数十个 mySql 查询。它可以在例行程序中完成以加快速度而不是按顺序完成。所有例程完成后将汇总结果
标签: go