关于遍历chan取出的数据调用函数有误的问题。萌新求教!

AlanLiu0328 · · 859 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

代码如下(不完整):将1-100 分为10组,分别求和再相加。 taskChan 中有10个task,分别存着 1-10,11-20,,,,91-100这10组数字。 可是使用distributeTask1函数时,算出的结果每次都不一样。而使用distributeTask函数则结果正常。另外在t.do()方法中,我打印了每个task的 begin和 end。两次的结果分别如下 ```go package main type task struct { begin int end int result chan int } func (t *task) do(group *sync.WaitGroup) { sum := 0 for i := t.begin; i <= t.end; i++ { sum += i } fmt.Printf("begin:%d,end:%d\n",t.begin,t.end) t.result <- sum group.Done() } func distributeTask1(taskChan chan task, resultChan chan int, wg *sync.WaitGroup) { for t := range taskChan { wg.Add(1) go t.do(wg) } wg.Wait() close(resultChan) } func distributeTask(taskChan chan task, resultChan chan int, wg *sync.WaitGroup) { for t := range taskChan { wg.Add(1) go processTask(t,wg) } wg.Wait() close(resultChan) } func processTask(t task,wg *sync.WaitGroup){ t.do(wg) } ``` ![image.png](https://static.studygolang.com/190704/7dd906a0e33cc766de7d14826ca5949f.png) ![image.png](https://static.studygolang.com/190704/ef6bf527aac9052b8562d844e67f515e.png)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

859 次点击  
加入收藏 微博
2 回复  |  直到 2019-07-04 21:49:59
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传