美文网首页
Go Module proxy

Go Module proxy

作者: 戈壁堂 | 来源:发表于2021-06-14 21:43 被阅读0次

    Go Module proxy

    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

    相关文章

      网友评论

          本文标题:Go Module proxy

          本文链接:https://www.haomeiwen.com/subject/qfsgeltx.html