Dictionary 从golang中的通道响应填充映射值

Dictionary 从golang中的通道响应填充映射值,dictionary,go,concurrency,channel,Dictionary,Go,Concurrency,Channel,我正在尝试根据各种goroutine的输出填充一个映射。为此,我创建了一个类型为(map[key][]int)的通道 并将其与键值一起传递给workers goroutine,例如int。 对于i:=0;i

我正在尝试根据各种goroutine的输出填充一个映射。为此,我创建了一个类型为(map[key][]int)的通道

并将其与键值一起传递给workers goroutine,例如int。 对于i:=0;i<10;i++{ go worker(我,完成) } 我想在读取钥匙时填充地图。目前我正在做如下工作

for i := 0; i < 10; i++ {
    m := <-done
    fmt.Println(m)
    for k,v := range m {
        retmap[k] = v
    }
}
fmt.Println(retmap)
i:=0的
;i<10;i++{

m:=您可以为每个工作者使用特定的通道,而不是在工作者的结果对象中编码该信息。类似于:

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)
}
func worker(完成chan[]int){
fmt.打印(“工作…”)
rnd:=兰特整数(10)
fmt.Println(“睡眠时间”,rnd,“秒”)
对于i:=0;i完成了,哪个工人返回哪个整数切片真的重要吗?从你的游乐场链接看,似乎所有工人都是相同的,所以他们的索引不重要。我的最终地图(retmap)需要根据处理请求的工作人员编制索引,因此我需要知道哪个工作人员正在处理哪个索引。对于实际情况,我的工作人员正在计算计算机上出现的文件类型。我需要返回映射{IP->count}因此,我将不同的IP传递给不同的工作人员,在等待和读取通道时,如何进行聚合。
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)
}