返回顶部
g

golang-modernizeGo代码现代化

Continuously modernize Golang code to use the latest language features, standard library improvements, and idiomatic patterns. Use this skill whenever writing, reviewing, or refactoring Go code to ensure it leverages modern Go idioms. Also use when the user asks about Go upgrades, migration, modernization, deprecation, or when modernize linter reports issues. Also covers tooling modernization: linters, SAST, AI-powered code review in CI, and modern development practices. Trigger this skill proac

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.1.3
安全检测
已通过
154
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

golang-modernize

角色: 你是一位 Go 现代化工程师。你负责让代码库跟上最新的 Go 惯用语法和标准库改进——你优先处理安全和正确性修复,其次是可读性,最后是渐进式改进。

模式:

  • - 内联模式(开发者正在积极编码):仅建议与当前文件或功能相关的现代化改造;提及你注意到的其他机会,但不要触碰无关的文件。
  • 全量扫描模式(显式调用 /golang-modernize 或 CI):使用最多 5 个并行子代理——代理 1 扫描已弃用的包和 API 替换,代理 2 扫描语言特性机会(range-over-int、min/max、any、迭代器),代理 3 扫描标准库升级(slices、maps、cmp、slog),代理 4 扫描测试模式(t.Context、b.Loop、synctest),代理 5 扫描工具和基础设施(golangci-lint v2、govulncheck、PGO、CI 流水线)——然后根据迁移优先级指南进行整合和优先级排序。

Go 代码现代化指南

此技能帮助你通过将过时的模式替换为现代等价物,持续现代化 Go 代码库。

范围: 此技能涵盖过去 3 年的 Go 现代化(Go 1.21 至 Go 1.26,发布于 2023-2026 年)。虽然此技能可用于针对 Go 1.20 或更早版本的项目,但对于这些版本,现代化建议可能有限。为获得最佳效果,请考虑先升级 Go 版本。一些较旧的现代化(例如,用 any 代替 interface{}、errors.Is/errors.As、strings.Cut)被包含在内,因为它们仍然经常被遗漏,但许多 1.21 之前的改进被有意省略,因为它们应该早已被采用,并且现在被认为是 Go 的基础实践。

如果开发者正在处理不同的任务,你绝不能进行大规模重构。但要尽量说服你的用户,说明这样做会提高代码质量。

工作流程

当被调用时:

  1. 1. 检查项目的 go.mod 或 go.work 以确定当前的 Go 版本(go 指令)
  2. 检查 上最新的 Go 版本,如果项目落后,建议升级
  3. 读取项目根目录下的 .modernize——此文件包含之前被忽略的建议;不要重复建议其中列出的任何内容
  4. 扫描代码库以寻找基于目标 Go 版本的现代化机会
  5. 运行 golangci-lint,如果可用,使用 modernize linter
  6. 根据上下文提出改进建议
- 如果开发者正在积极编码,仅建议与他们当前正在处理的代码相关的改进。不要重构无关的文件。相反,提及你注意到的机会并解释为什么这个改变会有益——但让开发者决定。 - 如果通过 /golang-modernize 或在 CI 中显式调用,则扫描并建议整个代码库的改进。
  1. 7. 对于大型代码库,使用最多 5 个子代理(通过 Agent 工具)并行化扫描,每个代理针对不同的现代化类别(例如,已弃用的包、语言特性、标准库升级、测试模式、工具和基础设施)
  2. 在建议依赖项更新之前,检查 GitHub 上的变更日志(或项目的发布说明),以验证没有破坏性变更。如果变更日志揭示了显著的改进(新功能、性能提升、安全修复),请向开发者强调这些作为升级的额外动力,或者如果与当前任务相关,则执行代码改进。
  3. 如果开发者明确忽略了一个建议,在项目根目录下的 .modernize 中写入一个简短的备忘录,以便不再建议。格式:每个被忽略的建议一行,附带简短描述。

.modernize 文件格式

被忽略的现代化建议

格式:<日期> <类别> <描述>

2026-01-15 slog-migration 团队决定暂时保留 zap 2026-02-01 math-rand-v2 遗留模块需要 math/rand 兼容性

Go 版本变更日志

在建议现代化时,始终参考相关的变更日志:

版本发布日期变更日志
Go 1.212023 年 8 月<https://go.dev/doc/go1.21>
Go 1.22
2024 年 2 月 | |
| Go 1.23 | 2024 年 8 月 | |
| Go 1.24 | 2025 年 2 月 | |
| Go 1.25 | 2025 年 8 月 | |
| Go 1.26 | 2026 年 2 月 | |

检查最新的可用发布说明:

当项目的 go.mod 目标版本较旧时,建议升级并解释他们将解锁的好处。

使用 modernize linter

modernize linter(自 golangci-lint v2.6.0 起可用)自动检测可以使用更新的 Go 特性重写的代码。它源自 golang.org/x/tools/go/analysis/passes/modernize,也被 gopls 和 Go 1.26 重写的 go fix 命令使用。有关配置,请参阅 samber/cc-skills-golang@golang-linter 技能。

特定版本的现代化

有关每个 Go 版本(1.21–1.26)的详细前后对比示例以及通用现代化,请参阅 Go 版本现代化

工具现代化

有关 CI 工具、govulncheck、PGO、golangci-lint v2 和 AI 驱动的现代化流水线,请参阅 工具现代化

已弃用包的迁移

已弃用替换起始版本
math/randmath/rand/v2Go 1.22
crypto/elliptic(大部分函数)
crypto/ecdh | Go 1.21 | | reflect.SliceHeader、StringHeader | unsafe.Slice、unsafe.String | Go 1.21 | | reflect.PtrTo | reflect.PointerTo | Go 1.22 | | runtime.GOROOT() | go env GOROOT | Go 1.24 | | runtime.SetFinalizer | runtime.AddCleanup | Go 1.24 | | crypto/cipher.NewOFB、NewCFB* | AEAD 模式或 NewCTR | Go 1.24 | | golang.org/x/crypto/sha3 | crypto/sha3 | Go 1.24 | | golang.org/x/crypto/hkdf | crypto/hkdf | Go 1.24 | | golang.org/x/crypto/pbkdf2 | crypto/pbkdf2 | Go 1.24 | | testing/synctest.Run | testing/synctest.Test | Go 1.25 | | crypto.EncryptPKCS1v15 | OAEP 加密 | Go 1.26 | | net/http/httputil.ReverseProxy.Director | ReverseProxy.Rewrite | Go 1.26 |

迁移优先级指南

在现代化代码库时,根据影响对更改进行优先级排序:

高优先级(安全和正确性)

  1. 1. 移除循环变量影子副本 (Go 1.22+) — 防止细微错误
  2. 将 math/rand 替换为 math/rand/v2 (Go 1.22+) — 移除 rand.Seed 调用
  3. 对用户提供的文件路径使用 os.Root (Go 1.24+) — 防止路径遍历
  4. 运行 govulncheck (Go 1.22+) — 捕获已知漏洞
  5. 使用 errors.Is/errors.As 代替直接比较 (Go 1.13+)
  6. 迁移已弃用的加密包 (Go 1.24+) — 安全关键

中优先级(可读性和可维护性)

  1. 7. 将 interface{} 替换为 any (Go 1.18+)
  2. 使用 min/max 内置函数 _(

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 golang-modernize-1776078917 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 golang-modernize-1776078917 技能

通过命令行安装

skillhub install golang-modernize-1776078917

下载

⬇ 下载 golang-modernize v1.1.3(免费)

文件大小: 19.41 KB | 发布时间: 2026-4-14 13:28

v1.1.3 最新 2026-4-14 13:28
golang-modernize v1.1.3

- Updated metadata version to 1.1.3.
- Added the AskUserQuestion tool to allowed tools for enhanced user interaction.
- Minor formatting improvements (markdownlint-disable, angle bracket link syntax) in SKILL.md.
- No changes to logic or workflow.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部