Attendre la terminaison de n goroutines

J'ai besoin de lancer une énorme quantité de goroutines et attendre la cessation de leur emploi. La manière intuitive semble utiliser un canal d'attendre jusqu'à ce que tous d'entre eux sont finis :

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

Mais le problème est que la quantité d'objets et, par conséquent, le montant des goroutines pourrait changer. Est-il possible de changer la taille de la mémoire tampon d'un canal ?

Est là peut-être une façon plus élégante de le faire ?

Vous pourrait réaffecter à chaque itération, mais vous pouvez regarder la WaitGroup.
tjameson, merci pour l'aide rapide. Qui a l'air vraiment bon. Vous souhaitez peut-être une réponse.
Fait, avec un exemple =D
double possible de Comment attendre pour tous les goroutines à la fin sans l'aide de temps.Le sommeil?

OriginalL'auteur lhk | 2013-05-16