AI 编程助手写 Go 为什么总用过时语法?JetBrains 官方的解法是给 Agent 装一份现代 Go 规范

AI 编程助手写 Go 代码时,最常踩的坑是什么?

不是逻辑错,不是语义错,而是——用的都是三五年前的写法

for i := 0; i < n; i++ 而不是 for i := range nerr == target 而不是 errors.Is(err, target)interface{} 而不是 any。模型知道这些新写法,但在浩如烟海的旧代码训练数据里,老模式出现频率实在太高,它本能地就选旧不选新。

这个问题,JetBrains 决定正式出手解决。

官方下场:给 AI 编程 Agent 写一份 Go 现代规范

JetBrains 一个月前在 GitHub 上开源了 go-modern-guidelines,目前已收获 2,873 颗星。它的目标非常明确:让 AI 编程助手从写第一行代码开始就用现代 Go,而不是写完再让 linter 去修。

和普通 linter 不同,这套指南是”生成时干预”而非”写完后检查”。它不是一个静态分析工具,而是一组可供 AI agent 直接调用的规则集,告诉你”这个场景该用什么现代写法”。

具体怎么工作的?以一个真实例子来看——

开发者 Petr 有一份 1039 行的 main.go,他让 AI 在 go-modern-guidelines 辅助下做重构。工具首先从 go.mod 读取项目的 Go 版本,然后给出适用于该版本的规则清单,比如:

  • cmp.Or(os.Getenv("NAME"), "default") 代替一串 nil 检查
  • slices.Contains(items, x) 代替手动循环查找
  • for i := range n 代替传统 for i := 0; i < n; i++

AI 选用了其中 6 条相关规则做了重构,代码现代性显著提升。这不是 AI 自己的判断,而是指南明确告诉它该怎么写。

覆盖范围:从 Go 1.0 到 Go 1.27

这份指南涵盖了 Go 1.0 到 Go 1.27 每个版本最有用的语言特性,包括 Go 官方 modernize analyzer 所涉及的所有改造路径。具体来说,指南会引导 AI 使用:

场景 旧写法 现代写法 起始版本
取非零默认值 if-else 链 cmp.Or(a, b, c) Go 1.22
切片包含判断 手动 for 循环 slices.Contains(s, x) Go 1.21
字符串切分 strings.Index + 切片 strings.Cut(s, sep) Go 1.18
错误类型匹配 类型断言 errors.AsType[T](err) Go 1.26
字面量指针 &Value{} new(Value) Go 1.26
并行任务 wg.Add() + go + wg.Done() sync.WaitGroup.Go() Go 1.24
字符串裁切 strings.TrimSuffix strings.CutSuffix Go 1.27

关键设计细节:指南分为两层——list 给出所有适用规则的一行摘要(约 45 条共 ~1000 tokens),explain 提供单条规则的详细说明和 before/after 示例。AI agent 先用 list 扫全部规则,再对相关规则调用 explain 获取详解,最大化节省上下文窗口。

还有一个容易被忽略的陷阱:指南在 cmp.Or 的说明里特别提到”所有参数在调用前都会被求值”——这意味着 cmp.Or(a(), b()) 会同时执行 a() 和 b(),不只是返回第一个非零值。这种”知道代价才能用对”的提醒,比简单告诉 AI 换语法要实用得多。

谁该用,谁该等

适合用:

  • 团队里所有人都在用 Claude Code、Cursor、Copilot 等 AI 编程助手写 Go
  • 需要确保 AI 生成代码符合项目所使用 Go 版本的语法规范
  • 希望从源头减少”代码写完再让 linter 修”的来回成本

不太需要:

  • 纯手工写 Go、不依赖 AI 助手的开发者(这类人更需要的是 Effective Go 和 gofmt)
  • 项目仍在用 Go 1.18 以下版本(很多现代特性无法享用)

支持哪些 AI Agent?

JetBrains 为主流 AI 编程助手都做了集成:

  • Claude Code:插件市场安装,两行命令激活(/plugin marketplace add JetBrains/go-modern-guidelines + /plugin install modern-go-guidelines
  • Junie:内置支持,GoLand 2026.1+ 默认启用
  • Cursor / Codex / OpenCode:通过 npx skills add JetBrains/go-modern-guidelines 安装
  • 其他 Agent:同样可通过 skills.sh 接入

首次运行时,CLI 会自动通过 go install 安装到本地缓存目录(~/.cache/go-modern-guidelines),不修改项目任何文件。需要 Go 1.25+ 环境,但 GOTOOLCHAIN=auto(默认开启)时 Go 可以自动下载兼容版本。

一个值得关注的方向

linter 只能告诉你代码错了,告诉你该怎么改;但 linter 不能在你写之前就告诉你该用什么写法。go-modern-guidelines 填补的正是这个空白——它是一套发生在代码生成之前的质量门禁。

这个思路有可能成为未来 AI 编程工具链的标准配置。想象一下,不只是 Go,Python 有 Modern Python Guidelines、Rust 有 Modern Rust Guidelines……每种语言都有一份由官方维护的”AI 编程规范”,让 AI 生成代码从一开始就符合业界最新共识,而不是带着大量技术债入库。

JetBrains 已经开了这个头。GitHub 上相关讨论和 issue 里,有不少开发者提议把这个模式迁移到其他语言——Python、Kotlin、Java 都在候选列表里。

下一步建议

如果你的团队在用 AI 编程助手写 Go,可以立即尝试:

第一步:在 Claude Code 中安装插件

/plugin marketplace add JetBrains/go-modern-guidelines
/plugin install modern-go-guidelines
/use-modern-go

第二步:用 go-modern-guidelines list --file-path <your_file.go> 扫描一个现有 Go 文件,看看 AI 原本会生成哪些过时模式

第三步:把 /use-modern-go 加入团队 AI 编程的标准化启动流程,从新代码开始杜绝旧写法

项目地址:https://github.com/JetBrains/go-modern-guidelines
官方介绍博客:Help AI Coding Agents Write Up-To-Date Code With Modern Golang Skills(2026-08-24)

评论区

0 条评论

登录后可评论。