go编译时,使用github依赖模块报错。
语言 | 版本 |
---|---|
Go | go1.16.4 windows/amd64 |
通过go get
安装第三方github模块后运行报错,错误信息如下:
main.go:4:2: no required module provides package github.com/gin-gonic/gin: go.mod file not found in current directory or any parent directory; see 'go help modules'
goland编辑窗口也提示错误:
Cannot resolve directory 'github'
0x02原因分析:
Go在2009年发布之初没有自己的包管理器。使用go get
命令把需要依赖的模块下载到$GOPATH/src
目录下。此时并没有版本控制,只能下载master的版本。
Go Modules是在Go 1.11版本中引入的。此时从git上下载的依赖库不再保存在GOPATH中,而是存到当前项目中,并使用go.mod
文件跟踪依赖库和其版本。GO111MODULE
这个环境变量也是此时引入的,作为控制是否开启Go Modules的开关。
明眼人一看就知道,Go Modules和GOPATH是两个对立的依赖存储和搜索方式。
从 Go 1.16 开始,默认行为是GO111MODULE=on
,这意味着如果您想继续使用旧GOPATH方式,则必须强制 Go 不使用 Go Modules 功能:
export GO111MODULE=off
Go 1.16 中最好的消息是我们终于获得了一个专门的命令来安装 Go 工具,而不是依赖于go get
不断更新你的go.mod.
代替:
# Old way
(cd && go install golang.org/x/tools/gopls@latest)
现在可以运行
go install golang.org/x/tools/gopls@latest
使用go install 前需要初始化当前主目录(即主模块)
go mod init gotest
Go 1.17 于 2021 年 8 月 16 日发布。至于 1.16,GO111MODULE=on
是默认行为,GO111MODULE=auto
相当于GO111MODULE=on.
如果您仍想使用该GOPATH方式,则必须强制 Go 不使用 Go Modules 功能使用GO111MODULE=off
方法一(推荐):
是用go install 代替go get 下载第三方模块
方法二(不推荐):
关闭GO111MODULE配置
go env -w GO111MODULE=auto
参考文献
为什么到处都是 GO111MODULE,以及关于 Go 模块的一切(随 Go 1.17 更新)
GO111MODULE作用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)