在开始使用 Golang 之前,从来没有觉得编程能如此的简单。众多的开源库只要 go get 一下就能在自己的项目当中使用了。但是,当我们需要使用一些私有库的时候 go get 会遇到一些问题。不过没有过不去的坎儿,问题总归是会有解决办法的。

0x1 问题

  我们在工作中会使用一些私有的代码存储仓库,为了尽可能的保护私有代码,通常只有登录后才能浏览代码。这样,即使是组织内部设置为公开的代码仓库,没有系统账号的游客也是看不见任何的代码的。尽管这样很好的保护了代码,但这让却使得 go get 无法获取需要的包。

0x2 设想

  修改服务端代码,代码仓库页面上添加 <meta name="go-import"> 来映射 https 的仓库地址替换为 ssh 地址。但是考虑到实际上修改代码仓库服务器的复杂性——权限、代码修改等等,这个方案的实施是相当困难的。

0x3 方案

  既然修改代码服务器难以实行,那么不得不考虑替代方案了。修改服务端不成,那就修改客户端。

  执行 go get fetch 代码的时候最终会由 vcs 客户端程序执行,所以我们可以在 vcs 客户端程序执行的时候把 https 转换成 ssh 地址来实现对私有库的获取。对于使用 git 作为 vcs 的场景,我们只需要 添加一行全局配置就能方便的解决这个问题:

  当然,这个方案的前提是你正确的配置了 git 能够通过 ssh 协议 clone 代码仓库。