我正在尝试go例程。
我有一个执行x次的go例程函数,我想等待所有这些例程在我的main函数中继续。我试图用chan作为屏障。
我尝试过这样的事情:
func goroutine(i int, ch []chan bool) {
//do stuff
ch[i] <- true
}
func main() {
var ch []chan bool
for i := 0; i < nb; i++ {
ch[i] = make(chan bool)
go goroutine(i, ch)
}
// wait to continue
for i := 0; i < nb; i++ {
<- ch[i]
}
}
我遇到以下错误:第panic: runtime error: index out of range
行<{1}}
第一个问题:
第二个问题:
答案 0 :(得分:1)
如果您只是想等待goroutines完成并且不需要通过频道重新获得结果,那么sync.WaitGroup
将是一个更清洁的解决方案。可行的方法是:
wg.Add(1)
并将一个指向wg的指针传递给goroutine。wg.Done()
wg.Wait()