go get
命令可以通过代理服务器获取到所需的依赖,而不需要访问提供此依赖的原始站点,例如Github, Gitlab
代理服务器上有对应版本
go get
命令尝试从代理服务器获取模块,当无法从代理服务器获取到代码时,再直接从原始站点直接下载。
我们可以通过环境变量设置来改变这一行为。
6 配置Go Module代理
代理配置通过环境变量GOPROXY
来设置。执行go env GOPROXY
可以查看当前的代理配置。默认值为https://proxy.golang.org,direct
-
GOPROXY
的值是一个列表 - 列表通过逗号
,
或者管道符|
进行分割 - 列表由代理服务器的URL地址或关键字组成
- 关键字包括——
-
off
:表示关闭代理功能 -
direct
:表示直接从代码共享原始站点进行下载
-
Go从左到右依次尝试访问配置好的代理服务器地址下载源码。当遇到关键字direct
时,将尝试直接从原始站点下载源码
6.1 关闭Go Module代理
将GOPROXY
的值设置为off
即可关闭Go Module代理功能
7 Go Module代理服务器的四个接口 (进阶)
Go Module代理对外暴露四个GET类型的接口:
-
/<module>/@v/list
: 列出代理服务器所知的版本列表。例如https://proxy.golang.org/gitlab.com/loir402/bluesodium/@v/list
返回
v1.0.0
v1.0.1
-
/<module>/@latest
:以JSON格式返回最新版本信息。例如https://proxy.golang.org/gitlab.com/loir402/bluesodium/@latest
返回{"Version":"v1.0.1","Time":"2021-01-20T18:49:34Z"}
-
/<module>/@v/<version>.info
:返回模块版本的元信息以及提交时间。例如https://proxy.golang.org/gitlab.com/loir402/bluesodium/@v/v1.0.1.info
返回{"Version":"v1.0.1","Time":"2021-01-20T18:49:34Z"}
-
/<module>/@v/<version>.mod
: 返回对应版本的go.mod
文件。例如https://proxy.golang.org/gitlab.com/loir402/bluesodium/@v/v1.0.1.mod
-
/<module>/@v/<version>.zip
: 返回模块对应版本的zip格式下载包。例如https://proxy.golang.org/gitlab.com/loir402/bluesodium/@v/v1.0.1.zip
8 常见错误:最新版本下载失败
当模块发布了一个新的小版本或补丁时,执行命令go get -u <module path>
不会总是立即下载最新的版本或补丁。代理服务通常会使用缓存策略以提高服务质量。解决这种下载失败的问题,有两种方案:
- 等待,然后重试(缓存策略将会失效)
- 在命令中指定希望下载的具体版本号,例如
go get -u <module path>@v1.0.2
网友评论