首页 > 解决方案 > Go 模块用 v0.0.0 替换显式版本--在 go.mod 中

问题描述

我最近在我的 Go 项目中添加了一个功能,它可能会破坏使用它的其他项目。我决定通过添加一个匹配的 git 标签2.0.0(以前是1.x.x)来为这个项目添加一个主要版本“A”。在我的另一个需要它的项目“B”中,我更新了它的go.mod文件,如下所示:

module gitlab.mydomain.com/namespace/B

go 1.12

require (
    gitlab.mydomain.com/namespace/A v2.0.0
)

如您所见,我特别提到v2.0.0了 ,但是一旦我运行 B,A 的版本就会被v0.0.0-<timestamp>-<revision>.

我确保标签存在于遥控器中。

我在这里想念什么?

标签: gitgogitlabversioninggo-modules

解决方案


从主版本2v2及更高版本)开始,您必须修改导入路径,您必须将主版本作为后缀添加到导入路径。您必须将包导入为:

import "gitlab.mydomain.com/namespace/A/v2"

这也必须出现在go.mod

require gitlab.mydomain.com/namespace/A/v2 v2.0.0

由于主要版本代表 Semver 中的不兼容更改,因此它们的导入路径也必须不同(相同的导入路径表示相同的依赖项)。这是导入兼容性规则

如果旧包和新包具有相同的导入路径,
则新包必须向后兼容旧包。

在 Go Modules Wiki 中阅读有关它的更多信息:为什么主要版本号必须出现在导入路径中?

以及博客文章:Go 博客:Go 模块:v2 及以后


推荐阅读