我是golang的新手。我了解到go get
是一个包管理器,并与各种版本控制系统联系远程回购。
因此,给定包导入路径,go get
如何决定使用哪个VCS?我总是在reqeust中看到下面的查询字符串:
?go-get=1
所以这里似乎有一些协议/惯例?
答案 0 :(得分:5)
关于Go的一个好处是,一切都在,好吧,Go :-)包括几乎所有的标准库和工具。
在cmd/go/vcs.go
中,我们可以看到这是如何完成的,并在cmd/go/alldocs.go
中记录了它。
具体来说,请看repoRootForImportPath
:
// repoRootForImportPath analyzes importPath to determine the
// version control system, and code repository to use.
func repoRootForImportPath(importPath string, security securityMode) (*repoRoot, error) {
这是做什么的:
vcsPaths
包含"已知主机的静态列表"。对于某些人(例如GitHub),这很容易,我们可以设置VCS。对于其他人(例如BitBucket),使用回调函数检查URL以查看可以使用哪个回购。
如果失败,它会尝试查看" VCS扩展程序"在路径中,例如example.com/foo.git
或example.com/foo.git/dir
。
最后go get
会查找go-import
元标记,如下所示:
<meta name="go-import" content="example.com/path git https://github.com/Example/repo.git">
另见parseMetaGoImports()
。 Vanity Imports with Hugo是关于如何使用它的一个很好的介绍。
没有真正的&#34;自动检测&#34;机制。因此,如果您的回复生活在https://example.com/stuff
,那么go get example.com/stuff
将不工作。您需要扩展程序或元标记。
添加了go-get=1
参数,以便网站构建者可以轻松查看这是来自go get
的请求,这在某些情况下可能很有用。