1 回答

TA贡献2041条经验 获得超4个赞
不是直接的,但有解决方法。
[...] 目前 HTTPS 服务器无法指示模块被前缀偏移
src/go
,因为那不是 Go 包路径的一部分。此布局不适用于go
命令的内置git
支持。
借助该go
命令的内置git
支持,导入规范以存储库的 URL 开头,后跟所需包的路径。因此路径必须相对于存储库根目录。使用虚荣导入路径,您可以根据需要使路径更长,但不能更短(例如example.com/pkg
)。
因此,以下是没有解决方法的最短可能导入路径:go.example.com/go/<module>
。
解决方法
对于真正敬业的人。
这些涉及一些设置和额外的处理,可能不值得仅仅为了导入路径的美观。
我已经制定了两种方法(以及一种可能不适用于大量模块的半解决方案)。首先是设置模块代理。第二个是创建另一个从目录复制go
并从那里导入的存储库。
使用replace
于go.mod
这个非常简单,您可以将基本导入路径设置为您喜欢的任何内容,并将replace
其放在go.mod
文件中。
缺点是管理许多相互依赖的模块变得复杂(如下一节的链接文章中所述)。也感觉不那么特别,负担在于要设置的导入项目而不是导入的项目。
Go 模块代理
go get
使用GOPROXY
环境变量来决定在哪里查找和解析包。基本思想是设置一个代理服务器,它知道如何翻译公共模块名称并从实际的 repo 中获取相关代码,然后将该服务器的 URL 放入GOPROXY
变量中。
对于私有模块/存储库,这种方法需要格外小心,因为您还必须处理身份验证。
复制 Git 存储库
最后一种方法是将go
目录的内容复制到另一个 repo,这可以通过 GitHub Actions 或类似工具自动完成。
要保留版本标签(如果使用)和分支(尽管不提交哈希),您可以使用git filter-repo
重写历史,以便该go
目录实际上是包根目录(并且一直是)git filter-repo --subdirectory-filter go/
:。
然后只需将虚荣go-import
标签设置为:
<meta name="go-import" content="go.example.com git github.com/example/repo-go">
(原始回购协议所在的位置github.com/example/repo
)。
- 1 回答
- 0 关注
- 86 浏览
添加回答
举报