📌 项目地址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。这类项目以后会越来越多。

这篇文章对你有帮助吗?

发表回复