【问题标题】:How can I bump major version to v2 without duplicating code of sub-packages and get latest version by default?如何在不复制子包代码的情况下将主版本升级到 v2 并默认获取最新版本?
【发布时间】:2020-04-05 20:38:42
【问题描述】:

我在将主要版本从 v1.x.x 升级到 v2.0.0 时遇到问题。

我创建了一个新的 git 标签v2.0.0 和一个新的子文件夹/v2/,将go.mod 文件放入其中并相应地更改了模块名称。

我的模块包含几个子包,现在我无法导入它们——即使是那些没有对它们进行更改的。

例如,我无法导入 /v2/mypkg/ - 我收到 module found but does not contain package 错误。如前所述,此文件夹仅包含 go.mod 文件。 我无法弄清楚 - 如果没有对 mypkg 进行任何更改 - 如果我希望制作另一个包的副本(?!),以便在 mypkg/ 和 @987654333 中都存在相同的代码@。

我尝试在常见的 Go 存储库中在线查找示例,看起来像:

  • 所有使用 go-mod 的 repos 都低于 v2
  • v2 以上的存储库与 go-mod 不是 100% 兼容

我可以通过使用+incompatible 导入我的包来解决它,然后创建一个 git 标签就足够了(无需创建/v2)。但是,如果我在没有严格要求 v2.0.0 的情况下导入包,默认情况下我会得到最新的 v1.x.x,这不是最新的,这对我来说是个问题。

我能做什么?

【问题讨论】:

  • 您不必复制任何内容。只需将所有包移动到 v2 目录并更新导入。
  • 至于“默认”包:没有这样的东西。您正在创建一个全新的模块。它的名称恰好与旧名称有一个共同的前缀。
  • 这意味着如果有人开始一个新项目并且需要导入我的模块,他们需要显式导入v2以获得最新版本,否则他们将获得最新的v1。恕我直言,这很奇怪
  • 实际模块中不需要/v2子目录,它只是一个名称,表示不同的导入路径。对于由于某种原因无法使用模块,或者您无法在 vcs 中标记或分支版本的用户,这是一种解决方法。例如github.com/hashicorp/hcl/v2包在repo中没有v2目录

标签: git go github versioning go-modules


【解决方案1】:

当您将版本更新为v2 时,您还需要更新引用该版本的import 语句以在模块路径上使用/v2 后缀。

没有该后缀,导入指的是原始 v1 模块中的包。 (如果您有意在两个主要版本之间提供兼容性填充程序,这可能会很有用。)

详情请见Developing a major version update..

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多