【问题标题】:Difference between Deprecate and retract?弃用和撤回之间的区别?
【发布时间】:2021-10-28 18:10:39
【问题描述】:

今天我升级到 Go 1.17。 https://golang.org/doc/go1.17 的发行说明讨论了这个新功能:

模块作者可以通过在 go.mod 中添加 // Deprecated: 注释来弃用模块

我从 Go 1.16 知道 go.mod 文件可以指定 retract 指令并收回一个或多个模块版本。

新的// Deprecated 注释的用法类似于retract。请你正式解释一下我什么时候应该使用// Deprecate,什么时候应该使用retract

【问题讨论】:

  • 过度总结:“retract” = “现在或永远不要使用”; "deprecate" = "明天不要使用"。

标签: go go-modules


【解决方案1】:

您应该使用// Deprecated: comment 表示您不再支持主要 版本。例如,您发布了v2.0.0,并且您不打算再使用v1.0.0v1.0.0 可能仍能按预期工作,但它可能缺少许多您只想添加到 v2.0.0 的新功能。

retract 可用于标记可能包含严重错误或漏洞且不应使用的次要版本或补丁版本(或[ ] 中包含的一系列版本)。例如,您可以发布v1.2.0,2 天后有人发现其中存在安全漏洞。您可以修改go.mod,将retract添加到版本v1.2.0,并将此添加标记为v1.2.1

retract (
    v1.2.0 // Security vulnerability discovered.
    v1.2.1 // Contains retractions only.
    [v3.0.0, v3.9.9] // Retract all from v3
)

这将通知go 工具不要升级到v1.2.0v1.2.1(例如,当您使用go get example.com/m@latest 指示更新到最新版本时)。当您修复问题并发布 v1.2.2 后,go get example.com/m@latest 将更新为 v1.2.2


引用Go Modules Reference: Deprecation:

弃用消息旨在通知用户该模块不再受支持,并提供迁移说明,例如迁移到最新的主要版本。不能弃用单个次要版本和补丁版本; retract 可能更适合这种情况。

并引用retract directive:

retract 指令表示不应依赖由go.mod 定义的模块的版本或版本范围。当版本过早发布或版本发布后发现严重问题时,retract 指令很有用。收回的版本应在版本控制存储库和module proxies 上保持可用,以确保依赖它们的构建不会被破坏。

【讨论】:

  • 是的:你可以同时弃用撤消一个模块的所有版本,如果你想传达“更喜欢不同的模块”(弃用) 和“不要在此模块的任何现有版本上添加依赖项”(撤消)。也就是说,撤回一个模块的每个版本可能就足够了:“不要在这个模块的任何版本上添加依赖项”必然暗示“更喜欢不同的模块”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2020-05-10
  • 2014-09-20
相关资源
最近更新 更多