Go模块将go.mod中的显式版本替换为v0.0.0- <timestamp>-<revision>

时间:2019-12-10 13:29:21

标签: git go gitlab versioning go-modules

我最近在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>覆盖。

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

我在这里想念什么?

1 个答案:

答案 0 :(得分:2)

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

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

这也必须出现在go.mod中,例如:

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

由于主要版本表示Semver中的不兼容更改,因此它们的导入路径也必须不同(相同的导入路径表示相同的依存关系)。这是import compatibility rule

  

如果旧软件包和新软件包的导入路径相同,
  新软件包必须与旧软件包向后兼容。

Go Modules Wiki: Why must major version numbers appear in import paths?

中详细了解

还有博客文章:The Go Blog: Go Modules: v2 and Beyond