Community编程与开发github.com

GillMacedo/checking-go-version-bumps

列出当 go.mod 中的 go 行升级时(例如从 go 1.21 升级到 go 1.24)会更改的 GODEBUG 行为默认值、导入受影响包的二进制文件,以及保留旧行为的 godebug 行。适用于用户想要升级 go 指令或 Go 版本、审查提升版本的 PR 或 Dependabot/Renovate 更改、询问升级 Go 会破坏或更改什么,或在 Go 升级后发现行为变化(ServeMux 路由、TLS、x509、GOMAXPROCS)的情况。

checking-go-version-bumps 是什么?

该技能通过一个 Go 工具帮助开发者分析和理解 Go 版本升级对项目的影响。当 go.mod 中的 `go` 行被提升时,许多标准库包(如 net/http、crypto/tls、crypto/x509、runtime 等)的 GODEBUG 默认行为会发生变化,可能在没有代码更改的情况下导致行为差异。该工具利用已安装的 Go 工具链比较两个 Go 版本之间的 GODEBUG 默认值差异,并列出所有导入受影响包的二进制文件。它仅读取 go.mod 而不编辑它,不构建或运行用户代码,也不使用网络,确保安全无侵入。对于每个受影响的设置,工具会指出相关包和 API(如 http.NewServeMux、tls.Config、x509.ParseCertificate 等),帮助开发者判断实际代码是否受到影响。结果包含结构化的报告,建议是采用新默认值还是通过 godebug 行临时固定旧行为,并说明这些固定是临时性的并将在未来版本中移除。该工具适用于 Claude Code、Cursor 或 Codex 等 AI 代理场景,方便开发者审查依赖升级或版本变更。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GillMacedo/godebugdiff/tree/main/plugin/skills/checking-go-version-bumps

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

检查 Go 版本升级

提升 go.mod 中的 go 行不仅会改变语言版本。每个主包都会获得新版本的 GODEBUG 默认值,因此 net/http、crypto/tls、crypto/x509、net/url、runtime 等包的行为可以在没有代码更改的情况下发生变化。该内置工具通过已安装的 Go 工具链查询哪些默认值发生了变化,以及哪些二进制文件导入了受影响的包。它需要已安装 Go,仅读取 go.mod 而不编辑它,从不构建或运行用户的代码,也从不使用网络。

运行工具

在模块根目录下执行,或传入模块目录:

go run "${CLAUDE_PLUGIN_ROOT}/scripts/godebugdiff.go" --to 1.24 .
  • --to 默认为已安装工具链的版本,且不能比它更新。如果用户想要更新的目标,请告知他们需要先安装该 Go 版本。
  • --from 默认为当前的 go 行。如果要审查已升级的 PR,请传入基础分支的版本:--from 1.21。
  • 添加 --json 以获取结构化输出,添加 --tests 以包含测试二进制文件。没有主包的模块会通过其测试二进制文件自动检查。
  • 如果提示模块不在模块缓存中,请在运行前询问是否执行 go mod download,因为这会使用网络。

检查每项变更是否到达二进制文件

该工具按读取设置的包列出设置。导入包并不意味着使用了更改的代码路径,因此请检查:

  1. 阅读设置的文档说明和链接。然后在代码中搜索它命名的 API,例如:
    • httpmuxgo121 的 http.NewServeMux 和 HandleFunc 模式
    • TLS 设置的 tls.Config
    • x509 设置的 x509.ParseCertificate 或 CreateCertificate
    • randseednop 的 rand.Seed
  2. 针对每项设置,说明代码是否使用了该路径:已使用、未使用、或无法判断(例如依赖项调用了它)。
  3. runtime 设置(如 containermaxprocs 和 updatemaxprocs)适用于每个二进制文件。指出那些对部署方式重要的设置,例如带有 CPU 限制的容器。
  4. 以 win 开头的设置仅影响 Windows。如果项目不部署在 Windows 上,请说明。
  5. “更改 go 命令”下的设置影响 go test -json 或 CI 中的构建,而非程序本身。

报告

  1. 一个简短表格:设置、变更内容、涉及哪些二进制文件、以及代码是否使用该路径。
  2. 建议采用新默认值或固定旧行为。仅对代码真正依赖的设置建议固定,并使用工具的 godebug ( ... ) 块。固定是临时性的:说明它们会在后续 Go 版本中被移除。
  3. 传递工具的注释,例如 Go 1.22 的循环变量变化,或者库的 go 行不会为导入它的程序设置 GODEBUG。

不要

  • 除非用户要求,否则不要编辑 go.mod。
  • 不要因为列表为空就说升级是安全的。该工具仅覆盖 GODEBUG 默认值。发布说明中列出了其他更改。
  • 除非用户要求,否则不要运行用户的测试或二进制文件来检查行为。

相关技能