我最近在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>
覆盖。
我确保该标签存在于遥控器中。
我在这里想念什么?
答案 0 :(得分:2)
从主要版本2
(v2
及更高版本)开始,您必须修改导入路径,必须将主要版本作为后缀添加到导入路径。您必须将软件包导入为:
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?
中详细了解