自己输出了下发现根本没问题。。。确实是保存进去了的 只是我用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)
刚学两天实在找不到怎么解决 谢谢大家了
有疑问加站长微信联系(非本文作者)