ByteNoteByteNote

字节笔记本

2026年9月6日

go-modern-guidelines:JetBrains 出品,让 AI 编码 agent 写出现代 Go

API中转
¥120

编码 agent 生成的 Go 代码往往停留在训练数据里的旧习惯:该用 max(a, b) 的地方写 if-else,该用 slices.Contains 的地方手写循环,nil 检查能连成一串。JetBrains 开源的 go-modern-guidelines 就是冲着这个问题来的:给编码 agent 一份明确的现代 Go 参考,覆盖 Go 1.0 到 Go 1.27 的语言特性和标准库新增。项目是 JetBrains 官方出品,Apache-2.0 协议,目前 3200+ stars,支持 Junie、Claude Code、Codex、Cursor 等主流 agent。

项目简介

这个仓库的内容是一份"写进 agent 里的指南":agent 装上之后,遇到 Go 任务会自动参考它,按项目实际版本选用特性。README 给的例子很直观:agent 会用 max(a, b) 代替 if-else 块,用 slices.Contains 代替手写循环,用 cmp.Or(a, b, c) 代替一串 nil 检查,还知道 Go 1.26 的新东西——new(42) 直接取值指针,errors.AsType[T](err) 做类型安全的错误匹配。

agent 还会先读 go.mod 判断项目的 Go 版本,只用该版本之前可用的特性和标准库,不写超出项目能力的代码。

为什么 agent 总写过时的 Go

README 里的动机分析值得一看,它指出了两个原因:

  1. 训练数据滞后。 模型不知道训练截止之后加的特性。没见过 errors.AsType[T](Go 1.26)的模型,自然用不出来。
  2. 频率偏差。 就算模型知道新特性,训练数据里 for i := 0; i < n; i++ 的数量远多于 for i := range n,输出时旧写法就占了上风。

这份指南用一份显式参考同时解决两个问题。这个方向和 Go 团队一致:官方的 modernize 分析器负责把存量代码更新成新惯用法(Go 团队有专题演讲),这份指南则让 agent 从第一行就写现代 Go,少留待办。

核心特性

完整的特性清单在仓库的 FEATURES.md,两千行文档逐条带示例。举几个有代表性的:

  • new(42):Go 1.26 起,new 可以直接接收值并返回指针,不用再声明中间变量
  • errors.AsType[T](err):类型安全的错误匹配,代替 errors.As 加目标指针的写法
  • sync.WaitGroup.Go:WaitGroup 自带 Go 方法,add/done 样板代码可以省掉
  • json_omitzero 与 encoding/json/v2:新版 JSON API 的正确用法
  • slices_collectmaps_keys_values_iter:标准库迭代器的现代用法
  • testing_t_contexttesting_b_loop:测试代码里的新惯用法,t.Context() 和 b.Loop

技术栈

各集成背后跑的是一个小 CLI,首次使用时 go install 自动装进本地缓存(比如 ~/.cache/go-modern-guidelines),不修改你的项目。

  • 语言:Go
  • 要求:Go 1.25 或更新;旧版本只要开着自动工具链切换(GOTOOLCHAIN=auto,默认开启)也能用,Go 会自己拉取兼容工具链
  • 分发:各 agent 的插件市场加 skills.sh,Apache-2.0 协议

安装指南

Junie

在 Junie CLI 会话里执行:

console
/extensions marketplace add JetBrains/go-modern-guidelines
/extensions install modern-go-guidelines

更新用 /extensions update modern-go-guidelines

Claude Code

在 Claude Code 会话里执行:

console
/plugin marketplace add JetBrains/go-modern-guidelines
/plugin install modern-go-guidelines@goland-claude-marketplace

装完后 agent 会在 Go 任务里自动调用;想显式触发就用 /modern-go-guidelines:use-modern-go

自动更新默认对第三方市场关闭,开启一次即可:运行 /plugin,打开 Marketplaces 选中 goland-claude-marketplace,选择 Enable auto-update。插件更新后用 /reload-plugins 应用到当前会话。也可以手动更新:

bash
claude plugin marketplace update goland-claude-marketplace
claude plugin update modern-go-guidelines@goland-claude-marketplace

Codex

在终端执行:

console
codex plugin marketplace add JetBrains/go-modern-guidelines
codex plugin add modern-go-guidelines@goland-codex-marketplace

更新要刷新市场再重装,Codex 会替换缓存副本:

bash
codex plugin marketplace upgrade goland-codex-marketplace
codex plugin remove modern-go-guidelines@goland-codex-marketplace
codex plugin add modern-go-guidelines@goland-codex-marketplace

Cursor

console
cursor-agent plugin marketplace add https://github.com/JetBrains/go-modern-guidelines

然后在 Cursor 会话里用 /plugins 命令安装。Cursor 目前没有命令行方式更新已装插件,更新市场后重开 Cursor,再在 /plugins 里重装。

其他 agent(skills.sh)

OpenCode 之类支持 skills.sh 的 agent 可以直接:

bash
npx skills add JetBrains/go-modern-guidelines

只装这一个 skill 的话加 --skill use-modern-go。更新:npx skills update use-modern-go -p -y(全局安装把 -p 换成 -g)。

快速开始

装好插件就没什么要配置的了。agent 检测到 Go 任务时自动调用这份指南:先看 go.mod 确定版本,再按版本写代码。Claude Code 用户可以随时用 /modern-go-guidelines:use-modern-go 显式触发。

本地开发

想改 CLI 或给项目贡献代码,仓库里有完整的开发流程:

bash
make dev-install          # 把本地构建装进工具缓存
export GO_MODERN_GUIDELINES_DEV=1   # agent 运行环境里设置

设置环境变量后,agent 用的就是你本地构建的版本,改完 CLI 再跑一次 make dev-install 重新构建即可。切回正式版用 make dev-uninstall。开发脚本与 agent 侧的封装是分开的,agent 永远无法触发构建。Windows 上没有 make,可以直接跑 sh scripts/dev-install.sh install 或 PowerShell 版本。

项目链接

分享: