在6824开始学习时,遇到的第一个坑。按照说明执行,结果go build失败,找不到 package “6.824/mr”
方案1
6824down下的包含了src目录,故将Gopath设置到src的父级目录即可,使得$Gopath/src该目录是合法的。
设置GoPath
cd 6.824
ls
# Makefile src
export GOPATH=`pwd` // 仅在当前终端有效,关闭后无效
go env // 查看环境设置
# GOPATH=当前的目录
按照教程进入 src/main目录,执行go build
#go build -race -buildmode=plugin ../mrapps/wc.go
src/mrapps/wc.go:9:8: cannot find package "6.824/mr" in any of:
/usr/lib/go-1.10/src/6.824/mr (from $GOROOT)
/home/XXX/6824/6.824/src/6.824/mr (from $GOPATH)
就很离谱,并没有搜到有相同错误的情况,可能对go都比较熟悉了吧。
多次尝试后,无果,只好修改导入的包
import "6.824/mr"
改为
import "../mr"
对用的到的文件修改import后,顺利执行结束。
运行结果
go build -race -buildmode=plugin ../mrapps/wc.go
# 生成文件 wc.so
go run -race mrsequential.go wc.so pg*.txt
# 生成 mr-out-0
但每个文件都要修改import,总感觉不是很对,太麻烦了。
方案二
去官网核对了一下,发现go版本不太一样,ubuntu上apt install 下来的默认是1.10,6824推荐使用1.15,这里合理推测是版本的问题。
重新安装go1.15后,问题解决了。确实离谱