Espera la terminación de n goroutines.

Necesito comenzar una gran cantidad de goroutines y esperar su terminación. La forma intuitiva parece usar un canal para esperar hasta que todos terminen:

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
    }
}

Pero el problema es que la cantidad de objetos y, por lo tanto, la cantidad de goroutines podrían cambiar. ¿Es posible cambiar el tamaño del búfer de un canal?

¿Hay tal vez una forma más elegante de hacer esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta