gpt4 book ai didi

go - "go get"如何知道远程 repo 要使用什么版本控制系统?

转载 作者:IT王子 更新时间:2023-10-29 00:58:39 26 4
gpt4 key购买 nike

我是 golang 的新手。我了解到 go get 充当包管理器并与各种版本控制系统联系远程仓库。

那么,给定一个包导入路径,go get 如何决定使用哪个 VCS?我总是在请求中看到以下查询字符串:

?go-get=1

这里似乎有一些协议(protocol)/约定?

最佳答案

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) {

它的作用是:

  1. vcsPaths 包含“已知主机”的静态列表。对于某些(例如 GitHub)这很容易,我们只需设置 VCS 即可。对于其他(例如 BitBucket),使用回调函数检查 URL 以查看可以使用哪个 repo。

  2. 如果失败,它会尝试查看路径中的“VCS 扩展”,例如 example.com/foo.gitexample.com/foo。 git/目录.

  3. 最后 go get 将查找 go-import 元标记,如下所示:

    <meta name="go-import" content="example.com/path git https://github.com/Example/repo.git">

    另见 parseMetaGoImports()Vanity Imports with Hugo很好地介绍了如何使用它。

没有真正的“自动检测”机制。因此,如果您的存储库位于 https://example.com/stuff,那么 go get example.com/stuff工作。您需要扩展或元标记。

添加了go-get=1参数,这样网站 build 者很容易看出这是来自go get的请求,这在某些情况下可能很有用例。

关于go - "go get"如何知道远程 repo 要使用什么版本控制系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40838321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com