$go help vcs
go get命令可以运行类似git这样的版本控制命令来下载代码。这个功能对非中心化(分布式)存储的Go包生态系统很重要,可以从任意服务器下载Go包代码,但是这也有一个潜在的安全问题,例如一个恶意的服务器故意让go get下载并运行恶意代码。
为了均衡考虑功能和安全性,go get命令默认只会使用git或hg从公共服务器下载代码。但它也会使用任意知名的版本控制系统(bzr、 fossil、git、hg、svn)来从私有服务器下载代码,私有服务器的网址由GOPRIVATE环境变量给出(更多信息参见go help private命令的输出)。只使用Git或Mercurial下载公共服务器里的Go包代码的理由是,这两个版本控制系统最关注作为不受信任的服务器的客户端运行时的相关问题。相反,Bazaar、Fossil和Subversion主要用于受信任的有权限的环境,但并没有在安全性方面做好工作。
当只有直接从版本控制系统下载代码的时候,版本控制命令才会受到一点限制。当从一个代理下载模块代码时,go get使用代理协议来下载。默认情况下,go get下载公共包会从Go模块镜像站(proxy.golang.org)下载,除非遇到因法律等原因无法从该镜像站下载的公共包或者私有包。默认情况下,go get能从Bazaar、Fossil或Subversion这些版本控制系统里下载代码,也是从Go模块镜像站下载,但是通过冒一定的安全性风险使用一个定制的沙盒运行代码版本控制命令。
GOVCS环境变量可用于更改特定包(由模块或导入路径标识)的允许的版本控制系统。GOVCS环境变量在模块模式和GOPATH模式下构建包时都适用。使用模块模式时,GOVCS环境变量的值会去匹配模块路径;使用GOPATH模式时,匹配版本控制存储库的根目录对应的导入路径。
