Golang中go get无法获取包的问题如何解决
Golang中go get无法获取包的问题如何解决 我正在使用 go1.13,已定义 GOPATH 且 $GO111MODULE 仍设置为 auto。
我编写了一个新程序,其中包含引用 GitHub 上某个包的导入(例如 github.com/toto/thing)。
根据文档(go help get),我期望命令 “go get” 会从 GitHub 下载该包。但实际并未下载。它确实在源代码中找到了导入路径,但提示无法在 $GOROOT/src 或 $GOPATH/src 中找到该包。
到目前为止,我总是通过显式指定导入路径来执行 “go get github.com/toto/thing”。
为什么 go get 不从网络获取包?
调用 “go get …” 会产生相同的结果,但耗时更长。
更多关于Golang中go get无法获取包的问题如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang中go get无法获取包的问题如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 Go 1.13 中,当 GO111MODULE=auto 时,如果您的项目位于 GOPATH 内或没有 go.mod 文件,Go 工具链会默认使用 GOPATH 模式。在这种情况下,go get 不会自动从网络获取包,除非您显式指定包的完整导入路径。这是因为在 GOPATH 模式下,Go 期望所有依赖项都位于 $GOPATH/src 中,并且不会自动下载缺失的包,除非您直接运行 go get <package-path>。
要解决这个问题,您可以尝试以下方法:
-
启用 Go 模块支持:将
GO111MODULE设置为on,强制使用模块模式。这会允许go get自动从网络下载依赖项,即使项目在 GOPATH 内。您可以通过设置环境变量或使用go env -w命令(如果 Go 版本支持)来实现。例如:export GO111MODULE=on然后运行
go get或go mod tidy来下载依赖项。如果您的项目还没有go.mod文件,可以先运行go mod init <module-name>初始化模块。 -
显式运行
go get命令:在 GOPATH 模式下,您需要手动指定包的完整路径来下载它。例如:go get github.com/toto/thing这会下载包并将其放置在
$GOPATH/src/github.com/toto/thing中。 -
检查网络和代理设置:确保您的网络连接正常,并且没有防火墙或代理阻止访问 GitHub。您可以通过设置
GOPROXY环境变量来使用代理,例如:export GOPROXY=https://goproxy.cn,direct这可以加速下载并绕过某些网络问题。
示例代码:假设您有一个简单的 Go 程序,导入 github.com/toto/thing。在启用模块模式后,您可以这样操作:
# 确保在项目目录中
export GO111MODULE=on
go mod init example.com/myproject
go get github.com/toto/thing
然后,您的 go.mod 文件将包含该依赖项,并且 go build 或 go run 会自动处理它。
如果问题仍然存在,请检查 Go 版本是否过旧(Go 1.13 已不再受支持,建议升级到最新稳定版),并验证 GOPATH 和 GOROOT 设置是否正确。

