背景
在 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 疾速解决申请超时导致的包下载失败的解决方法。
参考
- Goproxy
- Module proxy protocol