SuperAPI AI 工具集

go-refactoring

编程与开发

查看项目

更新于 10-15 21:37

技能介绍

用途:为 Go 项目提供一套行为保持不变的重构流程,核心原则是“重构只改结构、不改行为”,完成标准是每一步前后测试都通过,且每步小到可单独回滚。

主要能力与用法:

  1. 循环流程:改动前先确保 go build ./... && go test ./... 通过;若目标代码缺测试,先写特征测试固定当前行为。每次只做一处变换,随后执行构建、测试与 go vet ./...,再提交,且重构提交不得混入行为变更。若验证失败且一分钟内无法明显修复,应回滚该步。
  2. 重命名:优先用 gopls rename -w 文件:#offset 新名,因其理解类型、接口与嵌入;模块路径或导入路径变更可更新 go.mod 后用 sed 机械改写导入,再靠编译器检查。已发布库的导出标识符需走弃用周期,先加新名并标注 // Deprecated: use NewName.,下个大版本再删。
  3. 拆包:新建包后先迁移一个类型及其方法,旧包用类型别名(type User = user.User)保持兼容,分批迁移导入方并逐批构建,最后删除别名。
  4. 打破循环依赖:优先抽取共享核心到不导入任何包的第三包;其次在消费方定义回调接口实现依赖倒置;若两包无法互相独立描述,则合并。
  5. 安全修改函数签名:导出函数可先并列新形式,旧形式委托并标记弃用,分批迁移调用方后删除;单模块内也可直接改签名,靠编译器列出所有调用点。
  6. 子系统绞杀式迁移:定义消费方接口,让旧实现先满足它并接线,再在同一接口后实现新版本,用共享一致性测试套件验证两者,最后在组合根切换接线并单独提交删除旧实现。

限制与边界:顺手修 bug、调整结构体字段顺序、修改导出错误字符串或 JSON 标签都不属于重构,而是行为变更;无测试的改写不是重构。资料未提供该技能的安装方式、平台支持、收费与价格信息。