RepoDaily · 2026-08-28 · AI model / Agent framework

JetBrains go-modern-guidelines:让 AI 编码代理别再写出五年前的 Go

#15 AI model / Agent framework Go +314 JetBrains/go-modern-guidelines 打开仓库

JetBrains 官方技能包:让 Junie、Claude Code、Codex、Cursor 按 go.mod 声明的版本使用 Go 1.0–1.27 的现代惯用法,包括 Go 1.26 的 errors.AsType 与 new(42)。

项目类型AI model / Agent framework
最适合工具链已是 Go 1.25+、但 Junie / Claude Code / Codex / Cursor 仍在生成 1.21 之前旧写法的 Go 团队
风险等级低 — Apache-2.0 授权的指南文本,加一个只写入 ~/.cache/go-modern-guidelines 缓存、不改动项目的 CLI
评估时间约 10 分钟:在任一代理中安装,生成一个文件,对比惯用法差异

核心问题: 你的代理输出 `for i := 0; i < n; i++` 而不是 `for i := range n`,是因为训练语料,而不是你的 go.mod 吗?

93/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 93/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 低
100证据质量

包含 4 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

92可安装/可试用性

检测到 6 个工作流步骤、5 个下一步动作,以及 1 个命令/安装信号。

70维护可信度

趋势热度为 +314 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

97生产准备度

采纳风险标记为 low,并包含 5 条安全说明与 3 条跳过条件。

100差异化

3 个机会视角、3 个替代方案,以及 3 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

100Agent / AI 适配度

文章正文和元数据中检测到 8 个 AI/Agent 相关信号。

项目概览

go-modern-guidelines 是 JetBrains 的官方仓库(README 带有 official JetBrains project 徽章),全部内容就是一个技能文件 plugin/skills/use-modern-go/SKILL.md,供编码代理在写 Go 之前加载。2026-08-28 它以周期内 314 颗星排在趋势榜第 15 位。一个纯文档仓库拿到这个热度本身就是信号:开发者开始把代理的上下文当作可版本化的工具来管理,就像管理 linter 和 analyzer 一样。

输出差异非常具体:装了指南的代理会用 `max(a, b)` 而不是 if-else 块,用 `slices.Contains` 而不是手写循环,用 `cmp.Or(a, b, c)` 而不是一串 nil 判断。它还知道较新的特性,比如用 `new(42)` 直接取值指针、用 `errors.AsType[T](err)` 做类型安全的错误匹配 —— 这两项都来自 Go 1.26。覆盖范围从 Go 1.0 到 Go 1.27,包括 `modernize` 分析器针对的全部内容。

机制是按版本感知的,而不是一句“永远用最新语法”。技能让代理从 `go.mod` 检测项目的 Go 版本,只使用该版本及之前的语言特性与标准库新增,并优先选择现代惯用法。README 点出了旧写法的两个根因:训练数据滞后(模型没见过 `errors.AsType[T]` 就不可能用它)和频率偏差(语料里 `for i := 0; i < n; i++` 远多于 `for i := range n`,所以模型倾向输出前者)。

分发走代理市场:原生支持 Junie、Claude Code、Codex、Cursor,其他代理可通过 skills.sh 接入。集成会运行一个小 CLI,首次使用时用 `go install` 装进本地缓存(例如 ~/.cache/go-modern-guidelines),README 明确说明它不会修改你的项目。CLI 面向 Go 1.25 及以上;旧版 Go 只要开启了自动工具链切换(`GOTOOLCHAIN=auto`,默认开启)仍可运行,首次执行时由 Go 拉取兼容工具链。

解决什么问题

  • 编码代理生成过时的 Go:该用 `max(a, b)` 的地方写 if-else,该用 `slices.Contains` 的地方手写循环,该用 `cmp.Or(a, b, c)` 的地方堆 nil 判断。
  • 训练数据滞后:模型确实从未见过 `errors.AsType[T](err)` 这类截止日期之后的特性。
  • 频率偏差:即使模型认识某个特性,语料里占多数的旧写法仍会赢。
  • 代理通常不理会 `go.mod` 声明的版本,输出与项目工具链实际支持的能力脱节。
  • 面向人类的风格指南很少按版本逐一列出标准库新增,补不上生成代码这块缺口。

工作原理

  1. 代理加载技能:任务涉及 Go 时自动触发,Claude Code 中也可显式调用 `/modern-go-guidelines:use-modern-go`。
  2. 市场集成运行一个小 CLI,首次使用时经 `go install` 装入本地缓存(例如 ~/.cache/go-modern-guidelines);该 CLI 不修改项目。
  3. 技能让代理从 `go.mod` 检测项目的 Go 版本。
  4. 指南集合(覆盖 Go 1.0 至 1.27,含 `modernize` 分析器针对的全部内容)被过滤到该版本支持的特性。
  5. 生成代码时代理优先使用现代惯用法:`max`、`slices.Contains`、`cmp.Or`、`for i := range n`、`new(42)`、`errors.AsType[T]`。
  6. 更新通过市场进行:Junie 里 `/extensions update modern-go-guidelines`;Claude Code 里选择性开启自动更新后再 `/reload-plugins`。

试用路径:一个会话内从零到现代 Go

  • 前置条件:Go 工具链已安装且在 PATH 上(go.dev/dl),因为 CLI 在首次使用时通过 `go install` 安装。
  • Junie CLI:先 `/extensions marketplace add JetBrains/go-modern-guidelines`,再 `/extensions install modern-go-guidelines`;Junie 在任务与 Go 相关时自动调用技能。
  • Claude Code:先 `/plugin marketplace add JetBrains/go-modern-guidelines`,再 `/plugin install modern-go-guidelines@goland-claude-marketplace`;显式调用:`/modern-go-guidelines:use-modern-go`。
  • Codex 与 Cursor 使用同一套指南,其他代理经 skills.sh 接入(README 原文)。
  • 版本下限:CLI 面向 Go 1.25 及以上;旧工具链在 `GOTOOLCHAIN=auto`(默认)保持开启时仍可运行,首次执行由 Go 拉取兼容工具链。
  • 不会向仓库写入任何东西:CLI 位于用户级缓存(如 ~/.cache/go-modern-guidelines),不修改项目文件。

命令面:保持更新需要敲什么

  • Junie 安装:`/extensions install modern-go-guidelines`;Junie 更新:`/extensions update modern-go-guidelines`,均在 Junie CLI 会话内执行。
  • Claude Code 安装:`/plugin install modern-go-guidelines@goland-claude-marketplace`;显式技能调用:`/modern-go-guidelines:use-modern-go`。
  • Claude Code 更新:运行 `/plugin`,打开 Marketplaces,选中 `goland-claude-marketplace`,勾选 Enable auto-update(第三方市场默认关闭),再用 `/reload-plugins` 把新版本应用到当前会话。
  • 底层很轻:一个 CLI、一条依赖 —— `go.mod` 声明 `go 1.25.0` 和 `require golang.org/x/mod v0.37.0` —— 常驻机器的面很小。

维护风险:过时会在哪里出现

  • 指南跟随 Go 版本演进(当前集合到 1.27);安装滞后只是漏掉新惯用法,不会写坏代码。
  • Claude Code 默认对第三方市场关闭自动更新,若不主动开启,插件可能悄悄停留在旧版。
  • Junie 的更新是显式动作:`/extensions update modern-go-guidelines`。
  • 仓库采用 Apache-2.0,允许固定版本、拷贝 SKILL.md 或直接 fork 指南集。
  • 唯一的环境依赖是 PATH 上的 Go 工具链;`GOTOOLCHAIN=auto` 可覆盖旧版本 Go。

谁适合关注

适合关注

  • Go 1.21 及以上、有代理在写新代码的服务 —— 技能以 `go.mod` 版本为上限,旧模块同样适用。
  • 希望用同一份规范统一 Junie、Claude Code、Codex、Cursor 输出的组织。
  • 已在跑 `modernize` 分析器、想在生成端(而不只是事后改写)补齐覆盖的团队。
  • 任何能让 Go 工具链留在 PATH 上的环境,包括开启 `GOTOOLCHAIN=auto` 的 CI 机器。

可以先跳过

  • 写代码路径上没有任何 AI 代理的仓库 —— 指南只有通过代理才起作用。
  • 机器上没有 Go 工具链、且 `GOTOOLCHAIN` 被钉在 1.25 之前版本的受限环境。
  • 出于库兼容策略、要求生成代码保持 1.21 之前写法的团队。

风险与注意事项

低

只读指南加一个缓存的 CLI,Apache-2.0 授权;README 明确 CLI 不修改项目,现实的失效模式是指南过时,而不是代码损坏。

  • Apache License 2.0 覆盖使用、修改与再分发。
  • CLI 装在用户缓存(例如 ~/.cache/go-modern-guidelines),README 说明其从不修改项目。
  • 更新都是显式动作:Junie 用 `/extensions update`,Claude Code 需开启自动更新并 `/reload-plugins`。
  • 唯一外部依赖是 Go 工具链;`go.mod` 只有一条 require:golang.org/x/mod v0.37.0。
  • 市场集成会运行首次使用时经 `go install` 安装的小 CLI —— 请确认信任发布方 JetBrains 组织。
  • CLI 位于本地缓存(示例路径 ~/.cache/go-modern-guidelines),按 README 说明不修改项目文件。
  • Apache-2.0 含专利授权,是开发工具的标准条款。
  • Claude Code 对第三方市场默认关闭自动更新,指南不会无人值守地变化;需按市场手动开启。
  • 源材料未提及任何遥测或数据收集;提到的配置点只有 PATH 可用性与 `GOTOOLCHAIN=auto`。

替代方案比较

方案适用场景代价
golang.org/x/tools 的 modernize 分析器
已有存量旧写法 Go 代码,希望自动改写为新惯用法免费开源;会直接改文件,需要安排 diff 审查
Uber Go Style Guide
想要面向人类的风格规则与评审指引,而非按版本组织的特性覆盖免费阅读;并非为代理设计,编码代理不会自动应用
手写在 AGENTS.md / CLAUDE.md 里的规则
需要这套指南未覆盖的团队特有惯用法或库约定维护成本自担;Go 每发一版文本就可能过时

这个趋势说明了什么

Go 1.26 惯用法当天就能上线

`errors.AsType[T](err)` 和 `new(42)` 是 Go 1.26 新增,多数模型凭记忆写不出来;技能把它们连同 `cmp.Or(a, b, c)` 等替换项直接放进代理上下文。

在装好插件的 Claude Code 会话里要求写一段错误处理,检查输出是否用 `errors.AsType[T](err)` 取代对具体错误类型的断言。

减少新代码上的 modernize 报告

Go 官方 `modernize` 分析器负责把存量代码更新到新惯用法;代理写旧写法等于持续制造它的待办。对齐生成端可以减少新文件上的分析器发现。

分别在装与不装技能的情况下写同一个函数,对两个文件运行 modernize 分析器,比较发现数量。

四个代理共用一份规则

同一份 SKILL.md 通过市场分发给 Junie、Claude Code、Codex、Cursor,其他代理经 skills.sh 接入,工具之间的惯用法漂移有单一修复点。

在两个不同代理中安装,下达相同的 Go 任务,对比是否都选择 `for i := range n` 而非经典三段式循环。

下一步建议

在 Claude Code 里安装,用一份生成文件做判断

在一个代理里花十分钟就能知道基线输出到底有多旧;技能在 Go 任务上自动触发,测试本身就是你日常会做的任务。

  1. 确认 PATH 上能执行 `go version`(建议 1.25+,或保持 `GOTOOLCHAIN=auto`)。
  2. 在 Claude Code 中运行 `/plugin marketplace add JetBrains/go-modern-guidelines`,再 `/plugin install modern-go-guidelines@goland-claude-marketplace`。
  3. 要求写一个包含有限循环、取最大值和错误类型判断的小函数。
  4. 检查结果里是否出现 `for i := range n`、`max(a, b)`、`slices.Contains`、`cmp.Or`,以及在 Go 1.26 模块下是否用 `errors.AsType[T]`。
  5. 如果差异符合预期,就通过 `/plugin` 为 `goland-claude-marketplace` 开启自动更新,并在其他代理上重复安装。

RepoDaily 判断

少见的“纯上下文”代理基础设施:Apache-2.0 的指南文本、装在项目之外缓存里的 CLI、由 `go.mod` 驱动的版本检测。只要仓库在 Go 1.21+ 且四个受支持代理中有任何一个在替你写代码,就值得花一个会话装上、亲自看一次 diff。

信息来源