主题
09 · 用 AI 写 Go:提示词与审查清单
目标:把 AI 从「代写人」变成「初级同事」——你负责规格与验收,它负责起草。
真源仍是:https://go.dev/doc/ 与 https://pkg.go.dev/
1. 角色分工(默认)
| 角色 | 负责 |
|---|---|
| 你 | 需求边界、官方对照、go test / go vet、是否引入依赖 |
| AI | 草稿实现、解释报错、提出 idiomatic 改写 |
| 官方文档 | 仲裁「该不该这么写」 |
一句话:AI 可以加速,不能授权。
2. 高质量提示词模板
实现类
text
技术约束:
- Go 版本:1.22+
- 仅标准库(列出允许的包:net/http, encoding/json, ...)
- 禁止第三方框架
需求:
- <输入/输出/错误语义>
请先给出:
1) 导出 API 签名
2) table-driven 测试用例列表(含边界)
3) 再给实现
每个用到的标准库符号,注明 pkg.go.dev 路径。1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
审查类
text
请做 Go 代码审查(不重写大段):
清单:err 处理、导出命名、slice 共享、goroutine 退出、context 传递、
JSON tag、HTTP 状态码、是否多余依赖。
对每一条问题:严重级别 + 行号 + 对照官方哪一页/哪个包。1
2
3
4
2
3
4
学习类
text
用中文解释 https://pkg.go.dev/context 的 WithTimeout。
限制:200 字内;给 ≤10 行最小示例;指出 1 个常见误用。
不要扩展到分布式追踪。1
2
3
2
3
3. Go × AI 高发幻觉清单
| 幻觉 | 你怎么验 |
|---|---|
| 不存在的标准库函数/包 | go doc / pkg.go.dev 搜索 |
过时的 ioutil 用法 | 查现行 io / os 文档 |
| 假装需要 Gin 才能做路由 | 先问:标准库能否完成? |
错误的 json tag 语义 | 读 encoding/json |
| 并发示例无 Wait / 无 cancel | 对照本系列 06 清单 |
| 把 JS 异常模型写进 Go | 是否到处 panic / recover |
捏造 go.mod 依赖版本 | go mod tidy + 编译 |
4. 提交前 10 项审查清单(打印级)
- [ ]
gofmt/ 保存时已格式化 - [ ]
go test ./...通过 - [ ]
go vet ./...无新问题 - [ ] 所有
err被处理或有注释说明为何忽略 - [ ] 无「为了 AI 方便」引入的未批准依赖
- [ ] 公开 API 有文档注释(
// Foo ...) - [ ] 若有 goroutine:能说明退出条件
- [ ] 若有 HTTP:错误路径状态码合理
- [ ] 若有 JSON:字段导出与 tag 正确
- [ ] 你能脱离 AI 口头讲清这段代码在干什么
少一项就不要合并进你的小项目主分支(对自己严格一点)。
5. Cursor / 聊天里的实用设置习惯
- 把官方链接贴进上下文(Tour 页、pkg 页),减少胡编。
- 一次只改一个包;避免「帮我生成整个微服务」。
- 红灯测试优先:先让 AI 修到绿灯,再谈重构。
- 生成大段后,用
git diff自己读一遍(AI 时代更要读 diff)。
6. 反模式
| 反模式 | 更好做法 |
|---|---|
| 「用 Go 重写 Journal 后端」 | 第 10 篇级迷你 API |
| 无测试让 AI 连续改 20 轮 | 先锁测试再改实现 |
| 把博客代码当官方 | 先 pkg.go.dev |
| 全程英文提示却不读报错 | 读编译器:Go 报错通常很直 |
7. 验收清单
- [ ] 保存一份自己的「提示词模板」
- [ ] 用审查清单审过至少一次 AI 草稿
- [ ] 能举出 3 个 Go 相关 AI 幻觉例子
