【发布时间】:2018-10-07 16:27:39
【问题描述】:
我正在尝试使用 goroutine。
我有一个执行 x 次的 goroutine 函数,我想等待所有这些例程在我的 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 表示ch[i] = make(chan bool) 行
第一个问题:
- 是使用 chan 的好方法吗?
第二个问题:
- 为什么会出现此索引超出范围错误?
【问题讨论】:
-
你永远不会分配
ch。通常,尽管为此只使用sync.WaitGroup。也许在 Tour Of Go 部分末尾关于并发的一些链接会有所帮助:tour.golang.org/concurrency/11