0
点赞
收藏
分享

微信扫一扫

cannot find main module 解决办法


做6.824 实验的过程中想要跑测试,发现​​go test -run 2A​​​时 出现​​cannot find main module​​问题,测试跑不起来。

原因

这个原因是从GO1.11 版本开始引入了​​go.mod​​​文件来对项目中的go源码的编译相关的内容进行管理,经常使用GO的同学可能深受​​go get​​​或者​​GOPATH​​​的配置之苦,这个时候引入了​​go.mod​​​文件,就能将这一些配置释放出来,只需要将项目需要的依赖以及项目的路径放在​​go.mod​​中,交给GO本身来做即可。

这个时候一些老的GO项目本身没有配置​​go.mod​​​文件(比如​​mit6.824 lab​​ 的源代码没有配置),所以编译的时候会出现这样的问题。

解决

  • 如果不会配置​​go.mod​​文件,且项目中不需要太多的配置,只想编译运行,可以直接关闭GO编译对这个文件的依赖,通过设置GO环境变量​​GO111MODULE​​为​​off​​即可,​​export GO111MODULE=off​​。
  • 如果想要试用这个文件的功能,可以参考​​etcd​​的​​go.mod​​形态。

module go.etcd.io/etcd/v3 /*指定根目录*/

go 1.16

replace ( /*取代当前项目中的依赖包,即用左边的包取代右边的包*/
go.etcd.io/etcd/api/v3 => ./api
go.etcd.io/etcd/client/pkg/v3 => ./client/pkg
go.etcd.io/etcd/client/v2 => ./client/v2
go.etcd.io/etcd/client/v3 => ./client/v3
go.etcd.io/etcd/etcdctl/v3 => ./etcdctl
go.etcd.io/etcd/pkg/v3 => ./pkg
go.etcd.io/etcd/raft/v3 => ./raft
go.etcd.io/etcd/server/v3 => ./server
go.etcd.io/etcd/tests/v3 => ./tests
)

require ( /*依赖的代码包及其版本*/
github.com/bgentry/speakeasy v0.1.0
github.com/dustin/go-humanize v1.0.0
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/spf13/cobra v1.1.1
go.etcd.io/bbolt v1.3.6-0.20210426205525-9c92be978ae0
go.etcd.io/etcd/api/v3 v3.5.0-alpha.0
go.etcd.io/etcd/client/pkg/v3 v3.5.0-alpha.0
go.etcd.io/etcd/client/v2 v2.305.0-alpha.0
go.etcd.io/etcd/client/v3 v3.5.0-alpha.0
go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0
go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0
go.etcd.io/etcd/server/v3 v3.5.0-alpha.0
go.etcd.io/etcd/tests/v3 v3.5.0-alpha.0
go.uber.org/zap v1.16.1-0.20210329175301-c23abee72d19
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba
google.golang.org/grpc v1.36.1
gopkg.in/cheggaaa/pb.v1 v1.0.28
)


举报

相关推荐

0 条评论