如何使用Go模块代理
要开始使用Go模块代理,我们需要将GOPROXY
环境变量设置为兼容的Go module proxy。有多种方法:
1。)如果GOPROXY
没有设置,空或设置为direct
,go get
会直接从VCS(例如github.com)的下载依赖:
GOPROXY=""
GOPROXY=direct
也可以将其设置为off
,这表示不访问任何的网络。
GOPROXY=off
2.)您可以开始使用公共Go代理。您的选择之一是使用Go小组(*由Google维护*)中的Go代理。可以在这里找到更多信息:https : //proxy.golang.org/
要开始使用它,您只需设置环境变量:
GOPROXY=https://proxy.golang.org
其他公共代理有:
GOPROXY=https://goproxy.io
GOPROXY=https://goproxy.cn # proxy.golang.org 被墙了, 可以使用这个代替
3.)也可以运行多个开源实现并自己托管。例如:
Athens
:https : //github.com/gomods/athensgoproxy
:https://github.com/goproxy/goproxyTHUMBAI
:https : //thumbai.app/
这需要自己来维护。但可自己决定这个代理是通过公共互联网还是只能内部网络访问。
4.)可以购买商业产品:
Artifactory
:https://jfrog.com/artifactory/
5.)甚至可以传递一个file:///
URL。由于Go模块代理是响应GET请求(没有查询参数)的Web服务器,因此任何文件系统中的文件夹也可以用作Go模块代理。
即将进行的Go v1.13更改(已经发布)
Go v1.13版本中的Go proxy会有一些变化,我认为应该强调:
-
在
GOPROXY
环境变量现在可以设置为逗号分隔的列表。在回退到下一个路径之前,它将尝试第一个代理。 -
默认值
GOPROXY
会https://proxy.golang.org,direct
。direct
token后的所有内容都会被忽略。这也意味着go get
现在将默认使用GOPROXY
。如果根本不想使用Go代理,则需要将其设置为off
。 -
引入了一个新的环境变量
GOPRIVATE
,是一个逗号分隔的支持glob匹配规则的列表。这可用于绕过GOPROXY
某些路径的代理,尤其是公司中的私有库(例如:)GOPRIVATE=*.internal.company.com
。
(白话翻译:GOPROXY设置例如GOPROXY=https://goproxy.cn,direct
,意思是,首先尝试从https://goproxy.cn
进行下载,如果没有,启用direct,即从仓库的的源地址下载,比如 githu.com/spf13/viper 这个路径,会使用https://githu.com/spf13/viper 这个路径进行下载。GOPRIVATE
变量相当于同时设置了GONOPROXY
和GONOSUMDB
,即对某个指定的私有仓库,直接从私有仓库拉取而不走github,而且不对模块进行校验)
所有这些更改表明Go模块代理是Go模块的核心和重要部分。