Community程式設計與開發github.com

GillMacedo/checking-go-version-bumps

列出當 go.mod 中 go 行升級時(例如從 go 1.21 升到 1.24)會改變的 GODEBUG 行為預設值、哪些二進位檔會匯入受影響的套件,以及保持舊行為所需的 godebug 設定行。

checking-go-version-bumps 是什麼?

這是一個專為 AI 智能體(如 Claude Code、Cursor、Codex)設計的實用工具,用於分析 Go 版本升級對專案行為的影響。當使用者想要在 go.mod 中提升 go 指令版本、審查包含版本升級的 PR 或 Dependabot/Renovate 更新、詢問升級 Go 後會中斷或改變什麼,或是觀察到升級後出現行為變化(例如 ServeMux 路由、TLS、x509、GOMAXPROCS)時,此技能就能派上用場。 該工具會呼叫本機已安裝的 Go 工具鏈,比對新舊版本的 GODEBUG 預設值差異,然後列出每個受影響的套件及其匯入來源。它完全讀取但不修改 go.mod,不會建置或執行使用者的程式碼,也不會使用網路連線,因此非常安全可靠。支援的命令列參數包括指定目標版本、起點版本、輸出 JSON 結構化結果,以及包含測試二進位檔。最終回報會以表格形式呈現,並建議要套用新行為還是暫時鎖定舊行為,以及提供適用的程式碼路徑分析。

相容平台✓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,例如 http.NewServeMux 和 HandleFunc 的模式(針對 httpmuxgo121)、tls.Config(針對 TLS 設定)、x509.ParseCertificate 或 CreateCertificate(針對 x509 設定)、以及 rand.Seed(針對 randseednop)。
  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 預設值。發行說明中會列出其他變更。
  • 除非使用者要求,否則不要執行使用者的測試或二進位檔來檢查行為。

相關技能