Как собрать значения из N процедур, выполненных в определенном порядке?

Ниже приведена структура типа Stuff. У этого есть три целых.Number, егоDouble И егоPower, Давайте представим, что вычисление двойного числа и степени заданного списка целых чисел является дорогостоящим вычислением.

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
}

Результатfmt.Println(stuff) должно быть таким же, как если бы материал был инициализирован как:

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

Я знаю, что могу использовать<- double а также<- power собирать значения из каналов, но я не знаю, какие двойные / полномочия принадлежат каким числам.

Ответы на вопрос(2)

Ваш ответ на вопрос