Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导入外部服务的本地go模块_Go_Go Modules - Fatal编程技术网

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

导入外部服务的本地go模块,go,go-modules,Go,Go Modules,背景: 两个应用程序-A和B 应用程序“A”包含两个go.mod文件 A/pkg/test/go.mod:(我在这里保留了特定于应用程序的结构,这些结构将被其他愿意集成的服务重用) A/go.mod:(根模块作为本地模块导入pkg/test) 现在应用程序“B”希望通过简单地导入应用程序的Apkg/测试包来重用它 冒险之旅: 此解决方案允许任何集成服务只提取pkg/test模块的依赖项,而不是将整个应用程序导入树 当前解决方案: 应用程序“B”使用以下go.mod导入应用程序“A”的pkg/测试

背景:

两个应用程序-
A
B

应用程序“A”
包含两个go.mod文件

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

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

现在
应用程序“B”
希望通过简单地导入
应用程序的A
pkg/测试包来重用它

冒险之旅:

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

当前解决方案:

应用程序“B”
使用以下go.mod导入应用程序“A”的pkg/测试模块:

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\u commit-sha方法

问题:

我想使用
标签
导入/pkg/test模块。 存储库A创建了一个标记,比如v2.0.0。当我用
v2.0.0
替换
v0.0.0-02345798575346-72cs44671e34
时,在运行
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模块包,只需在包含
go.mod
文件的目录中添加一个标记,然后附加您的版本

因此,在您的情况下,目录是
A/pkg/test
,假设您想使用semver
v0.0.1
这样标记:

git标签-a“a/pkg/test/v0.0.1”-m“初始测试签入”
git push origin--标记#推送所有本地标记
#git推送原点“A/pkg/test/v0.0.1”#推送单个标签

请注意:来自Go wiki的Russ Cox(vgo的创建者,即今天的Go模块)警告:

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



除了下面的答案外,请阅读/理解-因此不要从
v2
开始,而是从
v0
开始,慢慢过渡到
v1
的成熟状态
v2
表示一个与所有以前版本不兼容的突破性更改-因此应该非常认真地对待切换-请注意,您的优势不是一个。@colm.anseo我知道,但感谢您指出这一点,并发送了一篇很好的文章-可能对任何处理类似问题的人都非常有用issue@Volker你能详细说明一下这不是什么优势吗?这是我决定这样设计它的主要原因,我很想听听计数器的观点。@电源依赖性很便宜。特别是没有编译成二进制文件的测试依赖项。Go不是节点。
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
reading gitlab.com/A/pkg/test/pkg/test/go.mod at revision pkg/test/v2.0.0: unknown revision pkg/test/v2.0.0