Ohhnews

分类导航

$ cd ..
Jetbrains Blog原文

使用 Junie 和 Claude Code 编写现代 Go 代码

#go#jetbrains#ai#代码生成#插件

Go 开发者现在可以使用 AI 智能体 Junie 和 Claude Code 自信地编写现代 Go 代码。我们在 JetBrains 刚刚发布了一个新插件,其中包含针对 AI 智能体的指南,确保它们使用最新功能并遵循最佳 Go 实践,且与 go.mod 中指定的当前 Go 版本兼容。您可以在 go-modern-guidelines 找到相关的 GitHub 仓库。

为什么需要它?

Go 每年发布两个主要版本,是更新较为频繁的语言之一。然而我们发现,所有 AI 智能体——包括 Junie 和 Claude Code——都倾向于生成过时的 Go 代码。

Go 团队也在其中一篇文章中指出了这个问题:“在 LLM 编码助手被疯狂采用的浪潮中,我们意识到这些工具——毫不奇怪——倾向于生成与训练时使用的大量 Go 代码风格相似的代码,即使有更新、更好的方式来表达同一个想法。”

例如,以下代码片段展示了智能体如何使用手动循环在切片中查找元素:

$ go
// HasAccess checks if the user's role has access to protected resources.
func HasAccess(role string) bool {
    for _, allowed := range allowedRoles {
       if role == allowed {
          return true
       }
    }
    return false
}

在有更简洁、更地道的解决方案可用的情况下,智能体仍倾向于使用过时架构,主要有两个原因:

  • 数据截止:即使是最新的 AI 模型,也是在有时间限制的数据集上训练的,这些数据集都有一个“截止”日期(例如,对于 Claude Opus 4.6,截止日期是 2025 年 5 月)。它们不会识别或建议在该日期之后引入的功能,例如 Go 1.26 版本中的功能。
  • 频率偏差:AI 模型主要在可能未及时更新的开源代码库上进行训练。这些数据集中自然会包含比“新”代码更多的“旧”代码,而且由于 AI 模型倾向于选择频率更高的选项,因此它们会建议过时的代码。

就像 Go 团队一样,我们 GoLand 团队也致力于保持 Go 生态系统的现代化和地道。为了减轻 AI 智能体加剧这一问题的负面影响,我们创建了一个插件,其中包含一套针对 Junie 和 Claude Code 的指南,帮助它们生成现代 Go 代码。该插件会自动识别您当前的 Go 代码版本(在 go.mod 中指定),并指示智能体使用相应的功能,例如使用 new(val) 代替 x := val; &x,或者使用 errors.AsType[T](err) 代替 errors.As(err, &target)(这两者均在 Go 1.26 中引入),以及该版本及之前版本中可用的标准库新增功能。

以下是应用了我们的指南后的相同代码示例,智能体实际上使用了 Go 1.21 中引入的现代 slices.Contains() 方法。

$ go
var allowedRoles = []string{"admin", "moderator", "editor"}

// HasAccess checks if the user's role has access to protected resources.
func HasAccess(role string) bool {
	return slices.Contains(allowedRoles, role)
}

如何启用

在 Junie 中

对于 Junie 版本 2xx.620.xx 或更高版本,您无需执行任何操作——这些指南将自动开箱即用。

如果您运行的是旧版本,请转到 设置插件已安装,找到 Junie,然后点击 更新

如果出于某种原因您想禁用这些设置,可以在 设置工具Junie项目设置Go 中进行操作。提供现代 Go 指南 选项默认处于启用状态,因此请取消勾选该框。

下载 GoLand

在 Claude Code 中

要在 Claude Code 中使用这些指南,请在 Claude Code 会话中运行以下命令进行安装。

将此仓库添加为市场源:

/plugin marketplace add JetBrains/go-modern-guidelines

安装插件:

/plugin install modern-go-guidelines

要激活它,请在会话开始时运行以下命令:

/use-modern-go

然后,Claude Code 将从 go.mod 检测 Go 版本,并指示智能体使用与该版本兼容的现代功能。

> /use-modern-go

This project is using Go 1.24, so I'll stick to modern Go best practices

and freely use language features up to and including this version.

If you'd prefer a different target version, just let me know.

在此之后,智能体编写的任何 Go 代码都将遵循这些指南。

祝您编码愉快!

GoLand 团队