如何阻止神经网络写出糟糕的 Go 代码
任何尝试过通过 Cursor、Claude Code 或 Copilot 生成 Go 代码的人,可能都遇到过它们各自的怪癖。神经网络总是试图把 Java 模式拖入 Go,忘记用 %w 包装错误,忽略 goroutine 中的竞态条件,生成一些简单函数就能解决的庞大结构。
每次都手动提示模型是一种可疑的乐趣。你想给助手一套正确的规则,然后忘记代码审查中的持续纠正。这正是法国开发者 Samuel Berthe(流行 samber/lo 库的作者)创建 cc-skills-golang 项目的原因。

什么是 Agent Skills 以及为什么你需要它们
Agent Skills 概念源于一个简单的问题:神经网络的系统提示词不是无限的。如果你把详细的样式指南、安全规则、数据库操作细节和框架特性加载到上下文中,模型就没有空间留给你的实际代码了。响应会变慢,生成质量会下降。
Skills 通过延迟加载解决这个问题。该项目是一组小型 Markdown 文件的集合。在会话开始时,只有每个模块的简要摘要(每个 skill 约 100 个 token)被加载到 LLM 的内存中。一旦你让助手「为这个函数写一个基准测试」或「为 gRPC 处理器添加错误处理」,模型就会看到匹配的触发器并加载包含该任务具体指令的详细文档。
没有 AI 垃圾
仓库 README 中的主要内容是作者诚实的警告:「这里没有 AI 垃圾。」
如今,GitHub 上充斥着自动生成的知识库,弊大于利。Samuel 的做法不同。他确实使用 Claude 从真实 Go 项目中的提交中初步提炼规则,但随后手动重写、编辑和测试了每一条指令。
作者甚至在测试套件上运行了准确性测量:
- 没有可插拔技能时,语言模型正确完成测试任务的比例为 56%。
- 启用规则集后,分数上升到 98%。
在特定主题上看到了特别强的准确性提升:为新 Go 特性(range-over-int、迭代器)现代化旧代码、编写基准测试和错误处理。
仓库里有什么
所有指令分为两个主要类别:通用语言规则和特定库的使用。
通用语言和架构规则
这些模块涵盖了几乎整个 Go 开发周期:
- 代码质量和风格:命名约定、安全的
nil和切片操作、内存泄漏预防、正确的文档和golangci-lint配置。 - 架构和模式:context 处理、无 goroutine 泄漏的并发、结构和接口设计、通过
gopls的重构模式。 - 测试和调试:表驱动测试、竞态检测、通过
pprof进行性能分析、OpenTelemetry 设置和指标收集。 - 项目设置:惯用的目录结构(cmd/internal/pkg)、CI/CD 管道和模块管理。
流行库支持
除了语言标准本身,仓库还嵌入了使用常见工具的规则:
- CLI 和配置:
spf13/cobra和spf13/viper。 - 依赖注入:
google/wire、uber/dig、uber/fx以及他们自己的容器samber/do。 - 网络协议:gRPC、GraphQL(
gqlgen)和 OpenAPI/Swagger。 - samber 生态系统:函数式辅助函数
samber/lo、单子samber/mo、日志samber/slog和错误链samber/oops。
一个有趣的点:skills 被设计成不相互重复。如果错误处理规则影响日志,它会在 golang-error-handling 模块中描述,而 golang-observability 模块只是引用它。这节省了 token。
如何安装
该项目支持几乎所有使用 Agent Skills 标准的流行工具。
最通用的方式是 skills 工具:
npx skills add https://github.com/samber/cc-skills-golang --all
如果你在 Cursor 中工作,只需将仓库克隆到 skills 文件夹中:
git clone https://github.com/samber/cc-skills-golang.git ~/.cursor/skills/cc-skills-golang
对于 Claude Code,使用插件的标准命令进行安装:
/plugin marketplace add samber/cc
/plugin install cc-skills-golang@samber
Copilot、Gemini CLI、OpenCode 和 OpenAI 的 Codex 也以相同方式支持。
在 CI 上用于自动审查
作者描述的一个有趣的用例是在 GitHub Actions 上运行 AI 代理作为审查者。
常规的 linter 擅长捕捉格式或未使用变量的问题。然而,如果神经网络在重构过程中悄悄破坏架构一致性,或者忘记在函数退出时取消 context,它们就无能为力了。带有此 skill 集连接到 PR 的代理会专门检查代码是否符合 Go 惯用法,并在 PR 到达你的同事之前突出架构问题。
值得一试吗
如果你在 Go 开发中积极使用神经网络,并且厌倦了为它们修复琐碎的错,安装这个套件绝对值得。它不会把 AI 变成高级架构师,但会显著减少愚蠢的拼写错误和非惯用代码的数量。
特别好的 是,这个项目不试图让上下文超载,并且保留了用公司规则覆盖任何 skill 的能力。只需创建你自己的内部模块,并指定它优先于标准模块。
相关项目