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
相关产品推荐
相关产品推荐

