Warten Sie auf die Beendigung von n Goroutinen

Ich muss eine Menge Goroutinen starten und auf ihre Beendigung warten. Die intuitive Methode scheint einen Kanal zu verwenden, um zu warten, bis alle beendet sind:

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

Das Problem ist jedoch, dass sich die Anzahl der Objekte und damit die Anzahl der Goroutinen ändern kann. Ist es möglich, die Puffergröße eines Kanals zu ändern?

Gibt es vielleicht einen eleganteren Weg, dies zu tun?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage