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

1 回复

更多关于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>

要解决这个问题,您可以尝试以下方法:

  1. 启用 Go 模块支持:将 GO111MODULE 设置为 on,强制使用模块模式。这会允许 go get 自动从网络下载依赖项,即使项目在 GOPATH 内。您可以通过设置环境变量或使用 go env -w 命令(如果 Go 版本支持)来实现。例如:

    export GO111MODULE=on
    

    然后运行 go getgo mod tidy 来下载依赖项。如果您的项目还没有 go.mod 文件,可以先运行 go mod init <module-name> 初始化模块。

  2. 显式运行 go get 命令:在 GOPATH 模式下,您需要手动指定包的完整路径来下载它。例如:

    go get github.com/toto/thing
    

    这会下载包并将其放置在 $GOPATH/src/github.com/toto/thing 中。

  3. 检查网络和代理设置:确保您的网络连接正常,并且没有防火墙或代理阻止访问 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 buildgo run 会自动处理它。

如果问题仍然存在,请检查 Go 版本是否过旧(Go 1.13 已不再受支持,建议升级到最新稳定版),并验证 GOPATHGOROOT 设置是否正确。

回到顶部