用途:借助 Go 1.26 起重建于 Go 分析框架的 go fix 命令,把 Go 代码现代化为更新的语言与标准库惯用法。重写会遵循模块声明的 Go 版本,不会写成模块未通过 go.mod 选择启用的写法。
主要能力与流程:先校验工具链为 Go 1.26 或更高,否则停止并给出升级指引;再检查前置条件,即存在 go.mod 且 git 状态干净;随后用 go fix -diff 预览、应用并反复执行直至无剩余修复(修复可能暴露更多修复);最后验证构建与测试通过并报告变更。工具链检查命令为:if [ "$(printf '%s\n' go1.26 "$(go env GOVERSION)" | sort -V | head -n1)" != "go1.26" ]; then echo "go fix modernizers require Go 1.26+, found $(go env GOVERSION)" >&2; exit 1; fi。
使用方式:完整现代化可依次执行 go fix -diff ./... 与 go fix ./... 并重复;也可一次只跑一个分析器,如 go fix -newexpr ./... 或 go fix -any=false ./...;CI 门禁可用 go fix -diff ./...,退出码非零表示存在可修复项;带构建标签的代码需按平台运行,如 GOOS=linux GOARCH=amd64 go fix ./...。模块 go 指令会限制可用的修复,不应仅为解锁更多修复而提升该指令,除非用户明确要求。
限制与注意:生成文件会被自动跳过,应修改生成器;多数修复保持行为不变,但 omitzero 将结构体类型 JSON 字段的 omitempty 换为 omitzero 属行为变更,mapsloop 的 maps.Clone 重写保留源 map 的 nil 性,可能与总是分配的循环不同,需重点审查;独立修复之间偶尔出现语义冲突,会以编译错误暴露,应手工解决而非重复运行 go fix。若未触发任何修复,应报告工具链版本、模块 go 指令,并说明该版本下代码已现代化。全部 22 个分析器及其最低 Go 版本、示例与标志见 references/analyzers.md。