golang写代码,有个地方特别不爽:没有一个成熟的包管理机制。前文 Golang官方包依赖管理工具 go mod 简明教程里介绍了golang 1.11版本推出的go module功能,但是实际使用时还是会遇到网络原因无法访问golang.org上的包的问题,我们可以通过配置镜像代理来解决。

众所周知,golang是google推出的,而google又长期处于404状态;我们有时会遇到一些托管在golang.org, k8s.gcr.io的库,在go mod之前可以从github拖下来改下名字,但go mod之后这个方法就行不通了,影响go mod的使用。

事实上在golang 1.11版本推出go mod的同时,还推出了一个新的环境变量GOPROXY,它的作用类似http(s)_proxy,用于为golang代码仓库做镜像代理。

有了这个变量,我们只需要再找一个稳定可靠的镜像仓库就可以了。

jfrog提供的GoCenter就是这样一个镜像仓库。

使用方法非常简单,配置环境变量即可:

export GOPROXY=https://gocenter.io

kube-role-finder为例,编译命令为

GOPROXY="https://gocenter.io" GO111MODULE=on go build

注意,GOPROXY开启以后,若失败不会自动回源。

GoCenter还推出了goc工具,它可以自动回源,如果你希望使用可以参考GoCenter的说明。

如果你有使用Athens私有仓库,可以将GOPROXY设置为Athens,然后将GoCenter设置为Athens的remote repository。

另外,按golang官方的blog,其2019年会推出一个官方的镜像服务,拭目以待吧~


update 2019-04-26:

据说goproxy.io 也很不错,可以试试看:

export GOPROXY=https://goproxy.io