编程与软件开发

Modern Go Guidelines 如何帮助人工智能编程代理编写现代 Go 代码

JetBrains 的 GoLand 推出了一项开源项目,为编程代理提供与项目所使用 Go 版本相关的指导,以减少其依赖过时模式或不兼容功能。该项目依靠 list 和 explain 两个工具,逐步提供适当的上下文,而不会修改项目文件。

2026-08-24
2 分钟阅读
14 浏览量
فريق تحرير certi.news
Modern Go Guidelines 如何帮助人工智能编程代理编写现代 Go 代码

人工智能编程代理可能生成能够运行的 Go 代码,但这并不意味着它使用了最新的语言语法或标准库新增功能。较旧的 Go 模式在训练数据中出现得更频繁,而较新的功能可能并未出现在模型所依据的数据中。为解决这一差距,JetBrains 的 GoLand 团队创建了一个名为 Modern Go Guidelines 的开源项目,为代理提供与项目中声明的 Go 版本相关的实用指导。

该项目提供什么?

这些指导涵盖 Go 1.0 至 1.27 版本中的语言功能和标准库新增功能,以及 go modernize 分析器所处理的模式。代理不会获得比项目所使用版本更新的版本指导。如果 go.mod 文件包含 go 1.25 指令,代理可以使用 Go 1.25 及更早版本的指导,但不会收到依赖 Go 1.26 或 Go 1.27 的建议。

这意味着,按照文章中的示例,代理可以建议使用 Go 1.25 引入的 sync.WaitGroup.Go,但不会建议需要 Go 1.26 的 errors.AsType。将指导与项目版本关联,旨在降低生成需要更新运行环境版本的代码的可能性,同时减少代理需要读取的不必要上下文。

渐进式披露,而不是加载全部上下文

该插件包含一个名为 go-modern-guidelines 的命令行工具,以及一项名为 use-modern-go 的指令技能。该工具支持两个主要命令:

  • list:显示与某个 Go 文件或指定版本相关的简短指导。
  • explain:提供更详细的说明,以及比较旧模式和现代替代方案的示例。

这些指令建议代理在修改相关文件前运行 list,并在需要理解某条规则时使用 explain。可以针对诸如 ./internal/worker/worker.go 这样的文件请求指导,也可以使用 --go-version 1.27 直接指定版本。list 的输出从适用的最新指导开始,并为每条规则包含一个稳定标识符,例如 sync_waitgroup_gotesting_t_contextjson_omitzero

现代模式示例

这些指导包含将常见模式替换为更新模式的实际示例,例如使用 slices.Contains 替代手写搜索循环,使用 minmax 替代手动比较,以及使用 cmp.Or 替代选择第一个非零值的链式写法。

指导还说明了如何使用 sync.WaitGroup.Go,替代分别分配 AddgoDone 操作;如何在 Go 1.26 及更高版本中使用 errors.AsType 进行类型安全的错误匹配;以及如何在 Go 1.26 及更高版本中,在需要值的指针时使用 new(value)。在 Go 1.27 中,指导展示了 strings.CutLastbytes.CutLast,作为 LastIndex 与手动切片的替代方案。

自 Go 1.27 起可用的 generic_methods 示例说明了:当某个通用操作自然地与某种类型相关联时,可以将其从包级辅助函数迁移为该类型的方法。explain 命令会通过前后对比示例解释规则,也可以在一次调用中解释多条规则。

对开发者而言,实际发生了什么变化?

这里的核心价值并不是自动更新旧代码,而是在生成或修改代码时,为代理提供一个小而明确的参考。该项目与 go fix 等工具协同工作,而不是取代它们:Modern Go Guidelines 的指导帮助代理从现代模式开始,而 go fix 则帮助更新代码库中已有的模式。

可以从插件市场或本地仓库安装该插件。集成要求 Go 工具链位于 PATH 中。首次使用时,集成会通过 go install 安装命令行工具,并将其存储在本地缓存中,不会修改项目本身。文章展示了将仓库添加为 Claude 市场、安装 modern-go-guidelines 并启用 /use-modern-go 的命令,也提到了一条用于在发布或更新本地仓库前进行测试的路径,其中包含 Claude 和 Codex 的示例。

certi.news 解读

该项目解决了使用人工智能代理时的一个实际问题:代码能够构建,并不保证它适合目标语言版本,或采用了可用的最佳模式。将指导与 go.mod 文件关联,为代理可以提出的建议设置了明确的技术边界,而渐进式披露则减少了向代理灌输其不需要的上下文。不过,该工具并不能消除开发者审查或测试的必要性;它为代理提供规则和示例,来源并未证明它会独立验证其生成的每一项更改。此外,已公布的覆盖范围达到 Go 1.27,因此更新版本的相关指导仍需添加和更新。

新闻来源
JetBrains Blog
查看原始来源 ↗
ف
作者

فريق تحرير certi.news

同一分类

你可能还喜欢

查看所有新闻