📌 项目地址:JetBrains/go-modern-guidelines | ⭐ 2,009 颗星 | 🔧 Go | 📜 未标注
一个具体的问题
让 AI 写 Go,你大概率见过这样的输出:
if a > b {
return a
}
return b
而不是 max(a, b)。手搓循环实现 slices.Contains,一串 nil 判断链而不是 cmp.Or(a, b, c)。
JetBrains 在 go-modern-guidelines(目前 2009 star)的 README 里解释了原因,两条:
训练数据滞后。 模型训练截止之后的新特性,它根本没见过。errors.AsType[T](err)(类型安全的错误匹配)和 new(42)(直接得到指向值的指针)都是 Go 1.26 才加入的,语料里没有,模型自然写不出来。
频率偏差。 就算模型知道某个特性,也倾向挑老写法。训练数据里 for i := 0; i < n; i++ 出现的次数远多于 for i := range n,输出分布就被带偏了。
第一条只能等模型迭代。第二条短期无解——旧写法在语料里的存量太大。
这个仓库做了什么
核心是一份 SKILL.md,打包成 AI agent 可消费的 skill。装上后 agent 会做三件事:从 go.mod 检测项目的 Go 版本;只使用该版本及之前的语言特性和标准库;在可用范围内优先选现代写法。
覆盖范围从 Go 1.0 到 Go 1.27,包括官方 modernize 分析器针对的所有特性。相当于给模型外挂了一份确定性的语言演进速查表,补掉训练数据的盲区。
和官方 modernize 的分工
Go 官方有个 modernize 分析器,负责把存量旧代码自动升级成新写法(README 引用了 Go 团队的演讲)。这个项目管另一头:让 agent 写新代码时就用对写法,省掉事后修复。一个治旧病,一个防新病。
安装(Junie CLI 为例)
支持 Junie、Claude Code、Codex、Cursor,其他 agent 走 skills.sh。在 Junie CLI 会话内执行:
/extensions marketplace add JetBrains/go-modern-guidelines
/extensions install modern-go-guidelines
之后遇到 Go 任务会自动触发这个 skill,不用手动调用。更新:
/extensions update modern-go-guidelines
Claude Code 等工具的具体安装命令,我拿到的 README 在此截断,直接看仓库原文。
两个前置条件
- 本机要有 Go 工具链且在 PATH 上。首次使用时,marketplace 集成会用
go install装一个小 CLI,装到本地缓存(如~/.cache/go-modern-guidelines),不动你的项目文件。 - CLI 目标环境是 Go 1.25 及以上。版本更旧也能跑,前提是开着
GOTOOLCHAIN=auto(默认开启),首次运行会自动拉兼容的工具链。
我的判断
这个项目本质是一份结构化的 Go 语言演进知识,套上 skill 格式让 agent 直接消费。检测版本、查表、换写法,全是确定性操作,几乎没有出错空间。如果你常用 AI 写 Go,装上就有收益;项目锁死老版本 Go,或者不用 AI 助手,那就算了。
更值得留意的是它代表的思路:训练数据滞后和频率偏差是所有模型的通病,不止 Go 一门语言。与其等模型迭代,不如把领域知识以 skill/rules 的形式显式喂给 agent。这类项目以后会越来越多。