You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go模块中Deprecated注释与retract指令的区别及适用场景咨询

Go 模块 // Deprecated 注释与 retract 指令适用场景说明

核心定位差异

  • // Deprecated 是整个模块的生命周期终止声明,作用是告知所有使用者该模块已无后续维护,不建议继续引入
  • retract 是特定模块版本的问题撤回声明,作用是告知使用者某一个或某几个版本存在问题,不应该使用对应版本

适用 // Deprecated 注释的场景

该注释需要写在go.mod文件中module声明的上方,格式为// Deprecated: 废弃说明,可标注推荐迁移的替代模块,适用场景包括:

  • 模块整体已经停止维护,后续不会再发布任何功能更新、bug修复或安全补丁
  • 模块已有官方的替代实现,希望所有使用者都迁移到新的模块,不再使用当前模块
  • 废弃逻辑覆盖模块的所有历史版本,只要用户引入了该模块,无论使用哪个版本,执行go get、go mod tidy等命令时都会触发废弃提示
    示例写法:
// Deprecated: 本模块已停止维护,请迁移到 example.com/pkg/newmod 替代
module example.com/pkg/oldmod

go 1.17

适用 retract 指令的场景

该指令是go.mod中的独立配置项,可单独或批量指定需要撤回的版本,适用场景包括:

  • 某版本发布后发现严重bug、安全漏洞,不希望任何用户继续使用该问题版本
  • 某版本属于误发布(例如打错版本标签、未完成开发就提前推送了tag),需要撤回该无效版本
  • 模块整体仍在正常维护,仅部分版本存在问题,后续还会继续发布新的正式版本
    示例写法:
module example.com/pkg/normalmod

go 1.17

// v1.2.0存在远程代码执行漏洞,请升级到已修复的v1.2.1及以上版本
retract v1.2.0

// 以下为内部测试版本,误对外发布,全部撤回
retract [v1.1.0-beta, v1.1.0]

注意:两者的用户提示逻辑不同,用户仅依赖了被retract的特定版本时才会收到提示,只要升级到未被撤回的版本就不会再收到警告;而只要依赖了被标记Deprecated的模块,无论用哪个版本都会收到警告。

内容的提问来源于stack exchange,提问作者blackgreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:18:01