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.