[英]Populate map values from channel response in golang
我正在嘗試根據各種 goroutine 的輸出來填充地圖。 為此,我創建了一個類型為 (map[key][]int) 的通道
done := make(chan map[int][]int)
並將其與鍵值一起傳遞給 worker goroutine,在示例中為 int。 對於我:= 0; 我 < 10; i++ { go worker(i, done) } 我想在從密鑰中讀取時填充我的地圖。 目前我正在做如下
for i := 0; i < 10; i++ {
m := <-done
fmt.Println(m)
for k,v := range m {
retmap[k] = v
}
}
fmt.Println(retmap)
我覺得我沒有正確地做到這一點。 有沒有更好的方法來使用渠道來做到這一點? 我們歡迎所有的建議?
您可以為每個工作人員使用特定的通道,而不是在工作人員的結果對象中對該信息進行編碼。 就像是:
func worker(done chan []int) {
fmt.Print("working...")
rnd := rand.Intn(10)
fmt.Println("Sleeping for ", rnd, "seconds")
for i := 0; i < rnd; i++ {
time.Sleep(time.Second)
}
fmt.Println("done")
// Send a value to notify that we're done.
done <- makeRange(0, rnd)
}
func main() {
channels := make([]chan []int, 10, 10)
for i := 0; i < 10; i++ {
channels[i] = make(chan []int)
go worker(channels[i])
}
retmap := make(map[int][]int)
for i := 0; i < 10; i++ {
retmap[i] = <-channels[i]
}
fmt.Println(retmap)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.