当前位置: > > > > 从 golang 中的通道响应填充地图值
来源:stackoverflow
2024-04-20 18:36:41
0浏览
收藏
Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《从 golang 中的通道响应填充地图值》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!
问题内容
我正在尝试根据各种 goroutine 的输出来填充地图。为此,我创建了一个类型为 (map[key][]int) 的通道
done := make(chan map[int][]int)
并将其连同键值一起传递给workers goroutine,在本例中键值是int。 对于我:= 0;我 < 10;我++ { 去工作(我,完成) } 我想在读取密钥时填充我的地图。目前我正在做如下
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) }
以上就是《从 golang 中的通道响应填充地图值》的详细内容,更多关于的资料请关注公众号!