现代 Go 语言指南
本仓库包含适用于代码智能助手的指南,旨在帮助它们编写符合现代标准的 Go 代码。例如,遵循这些指南的智能助手会使用 `max(a, b)` 而非 `if - else` 代码块,使用 `slices.Contains` 而非手动循环,使用 `cmp.Or(a, b, c)` 而非一连串的空值检查。它还了解 Go 1.26 引入的新特性,如 `new(42)` 用于获取值的指针以及 `errors.AsType[T](err)` 用于类型安全的错误匹配。这些指南涵盖了从 Go 1.0 到 Go 1.27 中最实用的特性,包括 `modernize` 分析器所针对的所有内容。
智能助手将:
- 从 `go.mod` 文件中检测项目的 Go 版本。
- 使用该版本及之前版本可用的语言特性和标准库新增功能。
- 优先采用现代编程习惯用法,而非旧模式。
动机
所有代码智能助手生成的 Go 代码往往较为陈旧,主要有两个原因:
- 训练数据滞后:模型不了解训练截止日期之后添加的特性。如果它们从未见过 `errors.AsType[T]`(Go 1.26),就无法使用该特性。
- 频率偏差:即使模型知道某些特性,也常常会选择旧模式。训练数据中 `for i := 0; i < n; i++` 的出现频率高于 `for i := range n`,因此输出的往往是前者。
这些指南通过为智能助手提供明确的参考,解决了上述两个问题,这与 Go 团队的发展方向一致。`modernize` 分析器用于自动更新现有代码以采用新的编程习惯用法(可参考 Go 团队的相关演讲)。这些指南对于新代码也有同样的目标:让智能助手从一开始就编写符合现代标准的 Go 代码,从而减少后续的修改工作。
要求
市场集成会运行一个小型的命令行工具(CLI),首次使用时可通过 `go install` 进行安装。因此,必须安装 Go 工具链并将其添加到系统的 `PATH` 环境变量中。该 CLI 会安装到本地缓存目录(例如 `~/.cache/go - modern - guidelines`),且不会修改你的项目。它支持 Go 1.25 及更高版本;在较旧的 Go 版本上,只要启用了自动工具链切换(`GOTOOLCHAIN = auto`,默认设置),仍然可以正常工作,这允许 Go 在首次运行时获取兼容的工具链。
安装说明
这些指南适用于 Junie、Claude Code、Codex 和 Cursor 等智能助手,也可通过 `skills.sh` 供其他智能助手使用。
Junie
- 安装:在 Junie CLI 会话中运行以下命令。
- 将本仓库添加为市场源:`/extensions marketplace add JetBrains/go - modern - guidelines`
- 安装扩展:`/extensions install modern - go - guidelines`
- 更新:在 Junie CLI 会话中更新已安装的扩展:`/extensions update modern - go - guidelines`
Claude Code
- 安装:在 Claude Code 会话中运行以下命令。
- 将本仓库添加为市场源:`/plugin marketplace add JetBrains/go - modern - guidelines`
- 安装插件:`/plugin install modern - go - guidelines@goland - claude - marketplace`
- 使用:Claude Code 在处理 Go 相关任务时会自动调用该技能。若要手动调用:`/modern - go - guidelines:use - modern - go`
- 更新:Claude Code 可在启动时自动更新市场源和已安装的插件。第三方市场源的自动更新默认是禁用的,因此需要手动启用一次:运行 `/plugin`,打开市场源列表,选择 `goland - claude - marketplace`,然后选择“启用自动更新”。当 Claude Code 提示插件已更新时,使用 `/reload - plugins` 命令将新版本应用到当前会话。若要手动更新,可在终端中运行以下命令:
- `claude plugin marketplace update goland - claude - marketplace`
- `claude plugin update modern - go - guidelines@goland - claude - marketplace`
Codex
- 安装:在终端中运行以下命令。
- 将本仓库添加为市场源:`codex plugin marketplace add JetBrains/go - modern - guidelines`
- 安装插件:`codex plugin add modern - go - guidelines@goland - codex - marketplace`
- 更新:刷新市场源并重新安装插件,以便 Codex 替换其缓存副本:
- `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
为方便使用,这些指南以 Cursor 插件的形式分发。
- 安装:在终端中运行以下命令将本仓库添加为市场源:`cursor - agent plugin marketplace add https://github.com/JetBrains/go - modern - guidelines`,然后在 Cursor 会话中使用 `/plugins` 命令安装插件。
- 更新:从 Git 刷新市场源并重新打开 Cursor,以便它能获取新的插件版本:`cursor - agent plugin marketplace update goland - cursor - marketplace`。如果已安装的插件仍为旧版本,可使用 `/plugins` 命令重新安装。目前 Cursor 没有提供非交互式的 CLI 命令来更新已安装的插件。
其他智能助手(通过 `skills.sh`)
相同的技能包可用于其他智能助手,如 OpenCode。
- 安装:使用以下命令进行安装:`npx skills add JetBrains/go - modern - guidelines`(`--skill use - modern - go` 仅安装此技能)。
- 更新:更新项目级安装的技能:`npx skills update use - modern - go - p - y`;对于全局安装的技能,将 `-p` 替换为 `-g`。
本地开发
若要在智能助手中测试 CLI 的更改,可将当前代码检出构建到工具的缓存中:`make dev - install`。然后在智能助手运行的环境中设置 `GO_MODERN_GUIDELINES_DEV = 1`。设置该环境变量后,使用该插件的任何智能助手都会运行你本地的构建版本,而非发布版本,Claude Code、Codex 和 Cursor 都是如此。在启动智能助手之前导出该变量,以便智能助手进程继承该设置:`export GO_MODERN_GUIDELINES_DEV = 1`。编辑 CLI 后,再次运行 `make dev - install` 进行重建;下次调用时将使用新的构建版本。若要恢复到发布版本,可取消设置该变量(或运行 `make dev - uninstall` 移除本地构建):`make dev - uninstall`。这需要安装 Go 工具链。开发版本的构建文件存储在工具的缓存目录(`$XDG_CACHE_HOME/go - modern - guidelines` 或 `~/.cache/go - modern - guidelines`)中。构建过程由 `scripts/dev - install.sh` 脚本驱动,该脚本与面向智能助手的包装器有意分开,以确保智能助手不会触发构建。如果没有 `make` 工具(例如在 Windows 系统上),可以直接运行脚本:
- `sh scripts/dev - install.sh install`(或 `uninstall`)
- `pwsh scripts/dev - install.ps1 install`(PowerShell 等效命令)