繁体   English   中英

具有相同依赖项的两个版本-较低版本被忽略

[英]Two version of same dependency - lower version getting ignored

我有一个项目,其中两个依赖项使用同一库的不同版本。 例如,我的项目具有依赖项A和依赖项B AB都使用公共库/依赖项X ,但版本不同。 A具有X v1版本,而B具有X v2版本。 所以现在当我在项目中添加AB作为依赖项时,项目go.sum有两个X版本。

我期望在运行时由AB引用各个版本。 但事实并非如此。 不知何故,当我在项目上运行测试时, A正在使用X v2 ,理想情况下,它应该使用v1 (因为A go.mod中已明确指定/添加了v1 )。 由于X v1v2存在很多差异,因此它会中断执行。

因此,在我的项目中,如何明确指定使用AXv1B v2 go模块中是否有此类规定?

您的B软件包必须导入带有/v2后缀的X

转到Wiki:模块:语义导入版本控制:

当v1或更高版本的软件包进行向后不兼容的更改时,召回semver需要对主要版本进行更改。 遵循导入兼容性规则和semver的结果称为语义导入版本控制Semantic Import Versioning) ,其中主要版本包含在导入路径中-这可确保在主要版本由于兼容性中断而增加时,导入路径会随时更改。

语义导入版本控制的结果是,加入Go模块的代码必须遵守以下规则:

  • 如果模块是版本V2或更高,该模块的主版本必须被包括作为/vN在模块路径的在go.mod文件(例如,所使用的端module github.com/my/mod/v2require github.com/my/mod/v2 v2.0.0 )并在包导入路径中(例如, import "github.com/my/mod/v2/mypkg" )。

导入路径中的此版本后缀将使它们成为2个“不同”的软件包。 如果AB使用X的相同主版本,则将没有2个主版本,则将选择较高的版本(“最小版本选择”算法)。 有关详细信息,请参见版本选择

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM