关于golang:通过-Module-proxy-protocol-解决-Go-依赖包安装问

10次阅读

共计 930 个字符,预计需要花费 3 分钟才能阅读完成。

背景

在 NAS 上搭建开发环境,发现装置 vim-go 时, 始终有报错: request timeout, dial tcp 172.217.24.17:443: i/o timeout 起因应该是 GFW 导致 vim-go 局部依赖包下载失败。

在做 Go 我的项目开发的时候,会常常依赖各种轮子,所以须要有相似 Proxy,用于疾速下载各种 Package(有 VPN 的请疏忽)。

<!–more–>

Module proxy protocol

Go Modules 是 Golang 官网最近几个版本推出的包管理工具,Go Mod 反对 Module proxy protocol , 配置后用户能够转发申请到代理服务器(然而不反对申请参数),来获取源服务器上的依赖包。

Modules proxy 在解决最近版本包的下载申请,会先在服务器上找 @latest 对应的包。如果没有找到会申请 <module/@v/list>, 拿到最新预公布的版本号并下载。

同时 proxy protocol 会对申请门路中的 <module> <version> 的大写字母转换成小写,以解决在大小写文件系统上可能存在的抵触。

即便间接从版本控制系统下载,go 命令也会合成显式信息、mod 和 zip 文件,并将其存储在本地缓存 $GOPATH/pkg/mod/cache/download 中, 从 proxy 服务器上下载的包也会放到这个文件夹上。因为缓存地址和 Proxy URL 下载文件存储地址雷同,通过设置 GOPROXY=https://example.com/proxy, 容许用户拜访这些缓存的模板版本。

Goproxy

Goproxy 是一个基于 Go 的 module proxy protocol 协定实现的一个代理处理器,用于疾速接入模块的代理, 应用办法详见官网文档。

同时 Goproxy 官网提供了一个很残缺的包代理服务器。

解决方案

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

总结

本文次要剖析 Go 官网最近推出的 Module proxy protocol 如何减速依赖包下载的工作原理,并提供一种通过 Goproxy 疾速解决申请超时导致的包下载失败的解决方法。

参考

  1. Goproxy
  2. Module proxy protocol
正文完
 0