我是golang的新手.我了解到它go get
是一个包管理器,并与各种版本控制系统联系远程回购.
那么,给定一个包导入路径,如何go get
决定使用哪个VCS?我总是在reqeust中看到下面的查询字符串:
?go-get=1
Run Code Online (Sandbox Code Playgroud)
所以似乎有些协议/惯例?
关于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) {
Run Code Online (Sandbox Code Playgroud)
这样做是:
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">
Run Code Online (Sandbox Code Playgroud)
另见parseMetaGoImports()
.Hugo的Vanity Imports是一个很好的介绍如何使用它.
没有真正的"自动检测"机制.因此,如果你回购生活,https://example.com/stuff
那么go get example.com/stuff
将无法奏效.您需要扩展或元标记.
go-get=1
添加该参数,以便网站构建者可以轻松地看到这是一个请求go get
,这在某些情况下可能很有用.