在 JAVA 中有 Maven 和 Gradle 这些很优秀的依赖版本管理工具,但 Golang 的项目中, Golang 官方并未提供类似的工具。

Golang 在 1.11版本引入了官方包(package)依赖管理工具(go mod) 方便依赖包的管理,但由于国内网络环境的原因,使用体验不是太好。

在此之前,Golang 主要依靠 Vendor 和 GOPATH 来管理依赖库,Vendor 相对主流,但现在官方更提倡 go mod 。

添加依赖

使用 GoLand 新建项目,选择 Go Modules(vgo) 即可

image

创建之后,将会自动创建一个 Go module 文件,用于依赖管理

下面我们尝试在项目中引入 Gin 作为例子

1
require github.com/gin-gonic/gin v1.4.0

将上述语句写在 go module 中, GoLand 将自动进行依赖的下载和管理。

由于众所周知的原因,golang.org/x 下的包是无法被下载的,当你等待几分钟之后,终端会无情的提示你:

1
2
3
go: golang.org/x/net@v0.0.0-20190503192946-f4e77d36d62c: unrecognized import path "golang.org/x/net" (https fetch: Get https://golang.org/x/net?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: golang.org/x/sys@v0.0.0-20190222072716-a9d3bda3a223: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
go: error loading module requirements

光折腾这个,足以消磨掉大多数人学习的热情,但艰难困苦依然无法阻挡我们使用和学习 Go 语言,市面上已经有 Go Module代理仓库服务了,我下面介绍 3 种比较常用的,你可以根据需要选择。

常用 Go Module 代理仓库服务

go module公共代理仓库,代理并缓存go模块。你可以利用该代理来避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建。

Goproxy 中国完全实现了 Go 的模块代理协议。并且它是一个由中国备受信赖的云服务提供商七牛云支持的非营利性项目。我们的目标是为中国和世界上其他地方的 Gopher 们提供一个免费的、可靠的、持续在线的且经过 CDN 加速的模块代理。

还有一个是 Goproxy.io,由于提供的服务大都差不多,下面我以 Goproxy 中国 的设置进行说明

如何使用

启用 go mod

1
echo "export GOPROXY=https://goproxy.cn" >> ~/.zshrc

设置 GOPROXY 环境变量

1
echo "export GO111MODULE=on" >> ~/.zshrc

使环境变量生效

1
source ~/.zshrc

关于 Windows 如何使用,你可以查看 官方文档

如果上述方案都未能解决问题,还有一个简单粗暴的方法:

打开 Goland - Preferences - Go - Go Modules (vgo) 设置 Proxy

image

然后尝试重新引入依赖,你会发现它以秒级的速度成功的引入了。

image