微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

导入外部服务的本地go模块

如何解决导入外部服务的本地go模块

背景:

两个应用程序-AB

Application 'A'包含两个go.mod文件

A/pkg/test/go.mod:(我在这里保留了特定于应用程序的结构,这些结构将被愿意集成的其他服务重用)

module A/pkg/test
go 1.14
require (
   some_dependencies vx.x.x
)

A/go.mod:(将pkg / test作为本地模块导入的根模块)

module A
go 1.14
require (
   A/pkg/test v0.0.0
)
replace A/pkg/test => ./pkg/test/

现在Application 'B'希望通过简单地导入Application's A pkg / test软件包

冒险活动:

解决方案允许任何集成服务仅提取pkg / test模块的依赖项,而不是导入整个应用程序树

当前解决方案:

Application 'B'使用以下go.mod导入Application 'A'的pkg / test模块:

module B
go 1.14
require(
   some_dependencies vx.x.x
   A/pkg/test v0.0.0
)
replace A/pkg/test => gitlab.com/A/pkg/test v0.0.0-02345798575346-72cs44671e34

现在我真的不喜欢在这里使用commit-timestamp_commit-sha方法

问题:

我想使用TAGS来导入A / pkg / test模块。 存储库A创建了一个标记,例如v2.0.0。当我将v0.0.0-02345798575346-72cs44671e34替换为v2.0.0时,运行go mod tidy/download后,我得到以下错误输出

reading gitlab.com/A/pkg/test/pkg/test/go.mod at revision pkg/test/v2.0.0: unkNown revision pkg/test/v2.0.0

问题:

我认为错误的软件包命名/模块命名/标记等可能导致此类错误。问题是我在这里想清楚什么并能正常工作吗?

解决方法

要在git repo中获取嵌套的go-modules包,只需将标签添加到包含go.mod文件的目录中,然后附加您的版本。

因此,在您的情况下,目录为A/pkg/test,可以说您想使用标记为v0.0.1的semver,如下所示:

git tag -a "A/pkg/test/v0.0.1" -m "initial test checkin"
git push origin --tags                            # push all local tags
# git push origin "A/pkg/test/v0.0.1"             # push a single tag

请注意::来自Go Wiki Should I have multiple modules in a single repository?-Russ Cox(vgo的创建者,即今天的go-modules)警告:

对于除高级用户以外的所有用户,您可能希望采用通常的方法 约定一个仓库=一个模块。对于长期而言很重要 回购可以包含多个代码存储选项的演变 模块,但是几乎可以肯定这不是您想要做的事情 默认。


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。