我有一个项目,其中两个依赖项使用同一库的不同版本。例如,我的项目具有dependency A
和dependency B
。A
和B
都使用通用的库/依赖项X
,但版本不同。A
拥有v1
的版本X
和B
具有v2
的版本X
。所以,现在当我添加A
和B
在我的项目依赖,有2个版本,X
在我的项目的go.sum
。
我期望在运行时由A
和引用各个版本B
。但事实并非如此。不知怎的,当我在我的项目运行测试时,A
使用v2
的X
,最好应使用v1
(因为在go.mod
中A
,明确指定/加v1
)。所以,它打破了执行,因为有很多在差异v1
及v2
的X
。
所以,在我的项目,我怎么能明确指定要使用v1
的X
通过A
和使用v2
的B
?go模块中是否有此类规定?
您的B
软件包必须X
带有/v2
后缀。
当v1或更高版本的软件包进行向后不兼容的更改时,召回semver需要对主要版本进行更改。遵循导入兼容性规则和semver的结果称为语义导入版本控制,其中主要版本包含在导入路径中-这可确保在主要版本由于兼容性中断而增加时,导入路径会随时更改。
语义导入版本控制的结果是,加入Go模块的代码必须遵守以下规则:
- 如果模块的版本为v2或更高版本,则必须
/vN
在go.mod文件(例如module github.com/my/mod/v2
,require github.com/my/mod/v2 v2.0.0
)和包导入路径(例如import "github.com/my/mod/v2/mypkg"
)中使用的模块路径的末尾将主要版本作为。
导入路径中的此版本后缀将使它们成为2个“不同”的软件包。如果A
和B
会使用的相同主版本X
,则将不会有2个主版本,则将选择较高版本(“最小版本选择”算法)。有关详细信息,请参见版本选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句