上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

go get命令变化与远程库获取规则

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    638

    主题

    5234

    回帖

    6105

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6105

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-8-13 16:24:49 | 显示全部楼层 | 阅读模式

    在Go1.17之前使用go get命令会自动下载依赖并编译,文件在gopath目录的bin目录中
    Go1.17以后不再编译文件,只是单纯的依赖下载

    并且在1.17版本之前
    如果main文件不在项目主目录,类似在cmd目录中
    如果输入 go get github.com/org/project/cmd
    会自动拉取,并进入cmd中编译文件

    因为远程包的格式是 网站域名/作者/项目名
    当输入相对路径的时候拉取项目会自动忽略,直接拉取github.com/org/project
    然后进入到cmd目录中编译main.go

    go get命令会将代码包远程导入路径与预置的代码托管站点的主域名进行匹配。如果匹配成功,则在对代码包远程导入路径的初步检查后返回正常的返回值或错误信息。

    对于非预置代码托管站点

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

    使用哪种版本控制系统取决于携带的后缀,如baz,git,svn,hg等

    当版本控制系统支持多种协议时,每个协议都会依次尝试下载。 例如,Git 下载会尝试使用 git://、https://、http://。

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

    元标记的格式如下:

    <meta name="go-import" content="import-prefix vcs repo-root">

    例如 import "example.org/pkg/foo"
    将会导致下列请求
    https://example.org/pkg/foo?go-get=1 (首选)
    http://example.org/pkg/foo?go-get=1 (后备)
    得到了页面的meta

     <meta name="go-import" content="example.org git https://code.org/r/p/exproj">

    go工具将验证是否ttps://example.org/?go-get=1包含同样的meta
    然后调用git clone https://code.org/r/p/exproj 放入 GOPATH/src/example.org.

    参考文章

    https://polarisxu.studygolang.com/posts/go/dynamic/1.17-golang-go-get-updated/
    https://doc.yonyoucloud.com/doc/wiki/project/go-command-tutorial/0.3.html
    http://c.biancheng.net/view/123.html
    https://pkg.go.dev/github.com/changkun/go-under-the-hood/gosrc/cmd/go

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表