解决go build报错cannot find main module; see ‘go help modules‘
描述:
在學習golang的過程中,在$GOPATH/src/github.com/xxx/hello目錄下執(zhí)行g(shù)o build和go test都會報下面的錯誤
go: cannot find main module; see ‘go help modules’
解決方案:
由于之前設(shè)置過GO111MODULE=on,所以使用下面的命令解決
$ go mod init hello- 生成了一個go.mod文件,然后再執(zhí)行g(shù)o build成功
原因:
之前為了提高依賴包的下載速度,使用了goproxy
然后開啟的時候使用了以下命令
這使得go默認管理依賴的方式變成了go module模式,即依賴一個go.mod文件,其中描述了項目依賴的包和版本(類似于npm package.json,maven的pom.xml)
而目錄中沒有g(shù)o.mod文件,所以go不知道主模塊是什么,所以無法編譯
深入探究
go語言在誕生之時,沒有提供隨之的包管理工具,而是使用go get來下載依賴包,并放在$ GOPATH / src下,并且沒有使用版本控制,以為著每次都會拉取master分支的代碼,軟件包的代碼放在src/github.com/xx/xx下面
而Go 1.11之后的版本引入了Go模塊(Go Modules),Go Modules使用go.mod中標記的軟件包的版本,軟件包的代碼放在pkg/mod下面
使用Go Modules還是GOPATH
go使用一個環(huán)境變量GO111MODULE來決定使用Go Modules還是GOPATH,該變量有三個值,并在不同版本下有不同的語義
| GO111MODULE = on | 不管在GOPATH 中還是外,都強制使用go.mod | 不管在GOPATH 中還是外,都強制使用go.mod |
| GO111MODULE = off | 強制 Go 表現(xiàn)出 GOPATH 方式,即使在 GOPATH 之外 | 強制 Go 表現(xiàn)出 GOPATH 方式,即使在 GOPATH 之外 |
| GO111MODULE = auto | 在GOPATH外時,GO111MODULE = on,在GOPATH內(nèi)時,GO111MODULE = off | 當有g(shù)o.mod或者在GOPATH 之外,GO111MODULE = on,當處于 GOPATH 內(nèi)且沒有 go.mod 文件時,GO111MODULE = off |
總結(jié)
以上是生活随笔為你收集整理的解决go build报错cannot find main module; see ‘go help modules‘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信公众号天气与聊天机器人小功能
- 下一篇: 有史以来最详细 安装部署Kubernet