如何获取 go 包的实际存储库 url

xin*_*nyi 3 go

例如,我们可以用来go get k8s.io/client-go安装 go 包,但是有没有办法找出源代码 URL 实际上是https://github.com/kubernetes/client-go?因为如果我直接访问 k8s.io/client-go 它会显示 404。

在这个例子中,go 客户端如何找出源代码在哪里?

icz*_*cza 6

命令 go:远程导入路径:

某些导入路径还描述了如何使用修订控制系统获取包的源代码。

...对于托管在其他服务器上的代码,导入路径可以使用版本控制类型进行限定,或者 go 工具可以通过 https/http 动态获取导入路径,并从<meta>HTML 中的标签发现代码所在的位置。

...如果导入路径不是已知的代码托管站点并且也缺少版本控制限定符,则 go 工具会尝试通过 https/http 获取导入并在文档的 HTML 中查找标记<head>

元标记的形式如下:
<meta name="go-import" content="import-prefix vcs repo-root">

import-prefix 是存储库根对应的导入路径。它必须是使用“go get”获取的包的前缀或完全匹配。如果不完全匹配,则会在前缀处发出另一个 http 请求以验证<meta>标签匹配。

例如,在您的情况下,该go工具将查询https://k8s.io/client-go?go-get=1. 我们自己检查一下:

curl https://k8s.io/client-go?go-get=1
Run Code Online (Sandbox Code Playgroud)

回复:

<html><head>
    <meta name="go-import"
          content="k8s.io/client-go
                   git https://github.com/kubernetes/client-go">
    <meta name="go-source"
          content="k8s.io/client-go
                   https://github.com/kubernetes/client-go
                   https://github.com/kubernetes/client-go/tree/master{/dir}
                   https://github.com/kubernetes/client-go/blob/master{/dir}/{file}#L{line}">
</head></html>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,响应 HTML 文档清楚地表明代码可在 处获得github.com/kubernetes/client-go

  • @xinyi `go-source` 元标记用于指定 GoDoc.org 未知的服务源代码的链接。有关更多详细信息,请参阅[此](https://github.com/golang/gddo/wiki/Source-Code-Links)。 (2认同)