为了账号安全,请及时绑定邮箱和手机立即绑定

当给定一个未知的代码托管域站点时,“go get”如何工作?

当给定一个未知的代码托管域站点时,“go get”如何工作?

Go
守候你守候我 2021-12-27 15:35:50
让我们举个例子。下面的命令将执行:go get robpike.io/ivy这将使我获得 $GOPATH/src 下存储库的内容。伟大的!现在,它是如何工作的?首先,robpike.io/ivy 回复 HTTP 重定向:HTTP/1.1 302 Found<a href="http://godoc.org/robpike.io/ivy">Found</a>通过阅读go help importpath,我了解到:如果导入路径不是已知的代码托管站点并且也缺少版本控制限定符,go 工具会尝试通过 https/http 获取导入并在文档的 HTML 中查找标记但是,使用以下命令在重定向页面的内容中查找元标记:curl -D --raw https://godoc.org/robpike.io/ivy | grep go-import什么都不返回。进一步阅读:repo-root 是包含方案但不包含 .vcs 限定符的版本控制系统的根。例如,导入“example.org/pkg/foo”将导致以下请求:https://example.org/pkg/foo?go-get=1(首选)http://example.org/pkg/foo?go-get=1 (后备,仅适用于 -insecure)再次:curl -D --raw https://robpike.io/ivy?go-get=1什么都不返回。所以问题是:我怎样才能像 Rob Pike 先生一样做同样的事情,并通过go get命令使用我自己的网站?
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您输入的最后一个命令会返回数据。当我curl -D --raw https://robpike.io/ivy\?go-get\=1在终端中运行时,我得到以下数据:

<meta name="go-import" content="robpike.io/toy git https://github.com/robpike/toy.git"><meta name="go-import" content="robpike.io/cmd/translate git https://github.com/robpike/translate.git"><meta name="go-import" content="robpike.io/cmd/freq git https://github.com/robpike/freq.git"><meta name="go-import" content="robpike.io/cmd/hira git https://github.com/robpike/hira.git"><meta name="go-import" content="robpike.io/cmd/kana git https://github.com/robpike/kana.git"><meta name="go-import" content="robpike.io/cmd/kata git https://github.com/robpike/kata.git"><meta name="go-import" content="robpike.io/nihongo git https://github.com/robpike/nihongo.git"><meta name="go-import" content="robpike.io/cmd/typo git https://github.com/robpike/typo.git"><meta name="go-import" content="robpike.io/filter git https://github.com/robpike/filter.git"><meta name="go-import" content="robpike.io/cmd/unicode git https://github.com/robpike/unicode.git"><meta name="go-import" content="robpike.io/cmd/doc git https://github.com/robpike/doc.git"><meta name="go-import" content="robpike.io/cmd/scrub git https://github.com/robpike/scrub.git"><meta name="go-import" content="robpike.io/cmd/strings git https://github.com/robpike/strings.git"><meta name="go-import" content="robpike.io/ivy git https://github.com/robpike/ivy.git"><meta name="go-import" content="robpike.io/cmd/now git https://github.com/robpike/now.git">

这允许 go get 命令解析 git 存储库的虚路径。


查看完整回答
反对 回复 2021-12-27
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

该命令curl -D --raw 'https://robpike.io/ivy?go-get=1'返回一个包含标签的 HTML 文档

<meta name="go-import" content="robpike.io/ivy git https://github.com/robpike/ivy.git">

go get命令使用此元标记来解析实际 git 存储库的虚导入路径。你也可以做到的。


查看完整回答
反对 回复 2021-12-27
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号