簡體   English   中英

從 golang 中的通道響應填充地圖值

[英]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)

我覺得我沒有正確地做到這一點。 有沒有更好的方法來使用渠道來做到這一點? 我們歡迎所有的建議?

游樂場: https : //play.golang.org/p/sv4Qk4hEljx

您可以為每個工作人員使用特定的通道,而不是在工作人員的結果對象中對該信息進行編碼。 就像是:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM