您的位置 首页 golang

让golang依赖也走mirror

少废话版:

用一个 glide 的国人改进版使用 mirror 功能来加速下载一些不能访问的 golang 库,具体参考

话痨版:

在中国搞技术的应该都对 mirror 这个东西比较熟悉,写代码的 python , ruby , js, java 的代码仓库都得去国内找个 mirror,弄操作系统不管是 yum 系的还是 deb 系的都会装完机后去改下载源,就连玩 docker 装完了也要先加个 docker 镜像仓库的 mirror。尽管各种 mirror 的最初设计都是出于一些企业级的应用场景,但谁让国内程序员金贵,不给企业级的服务就不能写代码呢。下面是阿里的一个 mirror 中心,可以感受一下:

然而作为 golang 的程序员比较悲催的一点是 golang 并没有一个集中的软件中心,加之现在的依赖工具又没一个标准所以几乎没见过给 golang 在国内做 mirror 的。不过好在大部分的库都是在 github 上,而 github 还算是可用的,大部分情况下还不是太糟。

但是总有些依赖并不是在 github 上的,有一些常用库在 上,而对于搞容器的很多依赖在 上,这两个网址都是托管在邪恶的 google 上,国内保护我们不让访问,我们就必须想办法了。

第一个方法:

由于这两个网站在 github 上都有一个同步仓库,分别在 和 所以比较笨的方法就是去下载 github 上对应的代码,然后在手动把目录名改回去,这样 golang 就可以认了。但是这种做法一来比较麻烦,二来升级库的时候会很麻烦,三来很多自动化的依赖管理工具就不能用了,所以大的项目并不推荐这么搞。

第二个方法:

glide 算是一个还比较流行的 golang 依赖管理,他提供了一个 mirror 的命令,可以进行自动的 package 地址替换,比如我想下载 那么先敲一个

glide mirror set   --vcs git 

可以在 ~/.glide/mirror. yaml 里看到所有进行 mirror 的 pacakge 这样就可以进行自动的地址替换。所有 和 的库都加进来就可在下载的时候进行自动替换了。

不过 glide mirror 有一个问题就是无法正确的处理 subpackage 比如我想下载 这个 mirror 就没有办法设置了,设置成 会把这个项目覆盖到 http2 目录,设置为 又会报找不到 vcs 文件信息。

第三个方法:

也就是终极方法,使用一个我国程序员 patch 过的一个 glide 版本(大概国外人都没这个需求),给 mirror 命令新加了一个 base 参数,上面的例子通过 glide mirror set   --base golang.org/x/net --vcs git 就可以解决了 

具体的配置信息可以点击,看看作者自己的一个 README。

希望经过这番折腾,可以让你写代码的时候心情好一点点。

文章来源:智云一二三科技

文章标题:让golang依赖也走mirror

文章地址:https://www.zhihuclub.com/98270.shtml

关于作者: 智云科技

热门文章

网站地图