如何自动下载所有依赖包?

大部分情况下大家下载 Go 项目都是使用go get命令,它除了会下载指定的项目代码,还会去下载这个项目所依赖的所有项目。

但是有的时候我们的项目由于各种原因并不是通过go get下载的,是通过git clone下载的,这样代码下下来就没有依赖包了,没办法编译通过的。这样的话怎么办呢?

go get -d -v ./...
  • -d标志只下载代码包,不执行安装命令;
  • -v打印详细日志和调试日志。这里加上这个标志会把每个下载的包都打印出来;
  • ./...这个表示路径,代表当前目录下所有的文件。

代码无法下载怎么办?

我们会经常用到扩展包,很巧的是扩展包国内无法访问。

此外,扩展包还被放在了 GitHub 上面,比如tools,直接下载下来,放到$GOPATH/src/golang.org/x/下面即可。

GOPROXY 环境变量

终于到了本文的终极大杀器 —— GOPROXY。

我们知道从 Go 1.11 版本开始,官方支持了 go module 包依赖管理工具。

其实还新增了 GOPROXY 环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。这无疑对我等无法科学上网的开发良民来说是最大的福音。

更可喜的是,goproxy.io 这个开源项目帮我们实现好了我们想要的。该项目允许开发者一键构建自己的 GOPROXY 代理服务。同时,也提供了公用的代理服务 https://goproxy.io,我们只需设置该环境变量即可正常下载被墙的源码包了:

export GOPROXY=https://goproxy.io

不过,需要依赖于 go module 功能。可通过 export GO111MODULE=on 开启 MODULE。

如果项目不在 GOPATH 中,则无法使用 go get ...,但可以使用 go mod ... 相关命令。

也可以通过置空这个环境变量来关闭,export GOPROXY=

对于 Windows 用户,可以在 PowerShell 中设置:

$env:GOPROXY="https://goproxy.io"

最后,我们当然推荐使用 GOPROXY 这个环境变量的解决方式,前提是 Go version >= 1.11。


与 GoLand 集成

在 GoLand 2019.1.3 中使用 Go Modules 需要进行两个设置:

  1. Preferences -> Go -> Go Modules (vgo),勾选 Enable Go Modules (vgo) integration 以启用 Go Modules,并在 Proxy 输入框中输入 https://goproxy.io 。如图所示:
    image.png
  2. Preferences -> Go -> GOPATH,勾选上 Index entire GOPATH 以索引整个 GOPATH,不然无法导入包。如图所示:
    image.png
0条评论 顺序楼层
请先登录再回复