Wie sammle ich Werte von N Goroutinen, die in einer bestimmten Reihenfolge ausgeführt wurden?

Below ist eine Struktur vom Typ Stuff. Es hat drei Zoll. EINNumber, es istDouble und seinPower. Stellen wir uns vor, die Berechnung des Doppelten und der Potenz einer gegebenen Liste von Ints sei eine teure Berechnung.

type Stuff struct {
    Number int
    Double int
    Power  int
}

func main() {
    nums := []int{2, 3, 4} // given numbers
    stuff := []Stuff{}     // struct of stuff with transformed ints

    double := make(chan int)
    power := make(chan int)

    for _, i := range nums {
        go doubleNumber(i, double)
        go powerNumber(i, power)
    }

    // How do I get the values back in the right order?

    fmt.Println(stuff)
}

func doubleNumber(i int, c chan int) {
    c <- i + i
}

func powerNumber(i int, c chan int) {
    c <- i * i
}

Das Ergebnis vonfmt.Println(stuff) sollte das gleiche sein, als ob Sachen wie initialisiert wurden:

stuff := []Stuff{
    {Number: 2, Double: 4, Power: 4}
    {Number: 3, Double: 6, Power: 9}
    {Number: 4, Double: 8, Power: 16}
}

Ich weiß, ich kann @ verwend<- double und<- power, um Werte von den Kanälen zu sammeln, aber ich weiß nicht, welche Doppel / Potenzen zu welchen Zahlen gehören.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage