知识卡片

channel传struct绑定结果与来源

专业/工作 · 1375.a.1.a

内容

如果多个 goroutine 各自算完一个结果后都往同一个 channel 送值,接收方拿到的只是一串裸值, 但完全不知道每个值对应的是哪个原始任务——比如同时请求三个网址,channel 里收到的三个页面大小 数字,谁对应哪个网址,顺序完全靠不住,因为网络响应到达的先后是不确定的。发散:channel 能传递切片、映射、struct 等任意复合类型,这一点常被忽略——遇到 “这个异步结果要配对回它的来源。

参考来源

- 位置:《Head First Go语言程序设计》第13章《分享工作:goroutine和channel》(源文件:_epub-src/index_split_003.html) - 结论依据:原文在该章节围绕“如果多个goroutine各自算完一个结果后都往同一个channel送值,接收方拿到的只是一串裸值,但完全不知…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:输出中。 使用“range”action来重复模板的某部分 在{{range}}action与其对应的{{end}}标记之间的模板部分,将对数 组、切片、映射或channel中收集的每个值进行重复。该部分中的任何操 作也将被重复。 在重复部分中,点的值将设置为集合中的当前元素,允许你将每个 元素包含在输出中或对其进行其他处理。 这个模板包…