【MIT 6.824】Lab1 搭建环境

4,474 阅读1分钟

系统环境

组件版本
MacOS10.15.7 (19H1323)
go1.16

下载代码

# 下载项目代码
$ git clone git://g.csail.mit.edu/6.824-golabs-2020 6.824
# 进入项目根目录
$ cd 6.824

运行wordcount样例程序

# 进入项目main目录
$ cd src/main
# 编译wordcount程序可执行文件
$ go build -buildmode=plugin ../mrapps/wc.go

但是,这个时候一般会出现以下的错误:

详见:

  1. vscode 中无法编译 mit-6.824 lab1 中的 wc.go 文件

  2. go - Golang build cannot find module for path _/mnt/c/XXXXX

(base) ➜  main git:(master) ✗ go build -buildmode=plugin ../mrapps/wc.go
build command-line-arguments: cannot find module for path _/Users/symsimmy/projects/mit/6.824/src/mr

原因是,早期的go版本是支持相对路径引用的,但是最新的go mod是不支持的,可以通过下面的方式,确认自己的go版本是否开启了go mod。

go env

出现 GO111MODULE=on,就代表开启了。关于go mod的相关知识,可以简单看一下这个文档Go go.mod入门。 那么,如何解决呢?我们可以将lab中的代码,修改为go module的方式。

首先,回到项目根目录,即6.824:

(base) ➜  6.824 git:(master) ✗ pwd
/Users/symsimmy/projects/mit/6.824
(base) ➜  6.824 git:(master) ✗ ls
Makefile src

接着,我们创建一个module,叫6.824-golabs-2020:

(base) ➜  main git:(master) ✗ go mod init 6.824-golabs-2020
go: creating new go.mod: module 6.824-golabs-2020

这时候,根目录下面就有了一个go.mod,内容为:

module 6.824-golabs-2020

go 1.16

接下来,修改代码,需要修改的地方主要有两处:

  1. 修改src/main/mrsequential.go第10行,修改为import "6.824-golabs-2020/src/mr";
  2. 修改src/mrapps/wc.go第9行,修改为import "6.824-golabs-2020/src/mr";

我们继续编译wc.go文件为可执行程序。

$ cd src/main
$ go build -buildmode=plugin ../mrapps/wc.go

接下来,就可以正常运行wordcount程序了。

# 删除上一次结果
$ rm mr-out*
# 运行wordcount程序
$ go run mrsequential.go wc.so pg*.txt
# 分页查看运行结果
$ more mr-out-0

运行结果如下:

运行结果