【已解决】buffered channel 只能写入一个值的问题

titidus · · 192 次点击 · 开始浏览    置顶
自己输出了下发现根本没问题。。。确实是保存进去了的 只是我用debug工具看似乎有点怪? ------------------------------------------- 我在`master.go`里定义了以下结构体 ```go type mapTask struct { inputFile string nReduce int } type Master struct { nReduce int mWaitCh chan mapTask ... } ``` 当程序启动后,会执行`master.go`中的`MakeMaster`,它会生成多个`mapTask`结构体,然后把它们send到mWaitCh这个channel中。 ```go func MakeMaster(files []string, nReduce int) *Master { m := Master{ nReduce: nReduce, mWaitCh: make(chan mapTask, len(files)), mRunCh: make(chan mapTask, len(files)) ... } // create map tasks for _, file := range files { task := mapTask{file, nReduce} m.mWaitCh <- task } m.server() return &m } ``` 现在的问题是这段代码只会正确地保存第一个`mapTask`在channel中,而后面的内容似乎指向一块没初始化的地方。 这是for循环执行前 ![image.png](https://static.studygolang.com/210528/fe7b5d776af3770248cf05bed4f47ff9.png) 这是for循环执行若干次后,inputFile读不出来,nReduce变成了随机值 ![image.png](https://static.studygolang.com/210528/9c69ee908bf0ee9113c591b4f2f1d875.png) 刚学两天实在找不到怎么解决 谢谢大家了

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

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

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