Aguarde o término de n goroutines
Eu preciso começar uma enorme quantidade de goroutines e esperar pela sua rescisão. A maneira intuitiva parece usar um canal para esperar até que todos estejam terminados:
package main
type Object struct {
//data
}
func (obj *Object) Update(channel chan int) {
//update data
channel <- 1
return
}
func main() {
channel := make(chan int, n)
list := make([]Object, n, m)
for {
for _, object := range list {
go object.Update(channel)
}
for i := 0; i < n; i++ {
<-channel
}
//now everything has been updated. start again
}
}
Mas o problema é que a quantidade de objetos e, portanto, a quantidade de goroutines pode mudar. É possível alterar o tamanho do buffer de um canal?
Existe talvez uma maneira mais elegante de fazer isso?