如果每周多出 8 小时,你会用来做什么?
我先说我的答案:打游戏、陪家人、搞副业。反正不是继续写那些写了 100 遍的样板代码。
一个月前,我做了个决定——把所有"不用动脑但必须有人做"的代码工作,全丢给 AI。不是让它写核心逻辑,是让它干那些你会写、但不想写的活。
一个月后,我每周省了 6-8 个小时。
这篇文章就是我在用的 5 个真实场景,每个都附了代码。你复制下来,改个 API Key,马上就能跑。
不是标题党。往下看。
场景一:样板代码?我一个 struct 丢过去,40 行就出来了
你肯定经历过这个:每开一个新项目,router.go、handler.go、middleware.go 这些文件写的永远是同一套东西。相似度 90%,但你不能直接复制——包名不一样、字段不一样、业务名不一样。
我以前的做法是:打开旧项目 → 复制 → 全局替换 → 改字段 → 调半小时。现在:
你只需要定义这个:
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
Role string `json:"role"`
CreateAt string `json:"create_at"`
}
剩下的 40 行,AI 帮你写完:
package main
import (
"encoding/json"
"net/http"
"strconv"
"strings"
)
var users = []User{
{ID: 1, Name: "张三", Email: "zhangsan@example.com", Role: "admin", CreateAt: "2026-01-15"},
}
func listUsers(w http.ResponseWriter, r *http.Request) {
role := r.URL.Query().Get("role")
var result []User
for _, u := range users {
if role == "" || u.Role == role {
result = append(result, u)
}
}
json.NewEncoder(w).Encode(result)
}
func createUser(w http.ResponseWriter, r *http.Request) {
var u User
json.NewDecoder(r.Body).Decode(&u)
u.ID = len(users) + 1
users = append(users, u)
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(u)
}
func main() {
http.HandleFunc("/api/users", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "GET":
listUsers(w, r)
case "POST":
createUser(w, r)
}
})
http.ListenAndServe(":8080", nil)
}
你写了 6 行 struct,AI 写了 40 行 CRUD。路由注册、参数解析、错误处理、内存存储——这些你闭着眼都会写、但每次都要花 20 分钟的东西,现在 3 秒出来。
省了什么:不是省了打字的时间,是省了"切换上下文"的脑力。你不用从业务逻辑里跳出来,去想路由怎么注册、参数怎么解析。那些是肌肉记忆,但不是价值。
场景二:写完代码不想写注释?丢给 AI,3 秒出 godoc
说实话,我特别讨厌写注释。
不是懒——是写代码和写注释用的大脑区域不一样。刚写完一段复杂的逻辑,脑子还在"计算机思维"里,突然要切换到"人类语言模式"去解释这段代码干了什么。这个切换本身就很累。
但注释又不能没有。半年后你自己回来看,没注释的代码跟别人写的没区别。
后来我养成了一个习惯:函数写完,Ctrl+A → 丢给 AI → 3 秒出注释 → 我确认一下描述准不准确 → 完事。
这是我项目里真实的一段代码,丢给 AI 之前一行注释都没有:
func collectCommits(cfg *Config, repos []string, since, until time.Time) ([]Commit, error) {
var all []Commit
for _, repo := range repos {
for d := since; !d.After(until); d = d.AddDate(0, 0, 1) {
commits, err := fetchCommits(cfg, repo, d.Format("2006-01-02"))
if err != nil {
log.Printf("获取 %s %s 失败: %v", repo, d.Format("2006-01-02"), err)
continue
}
all = append(all, commits...)
}
}
return all, nil
}
丢给 AI,3 秒后:
// collectCommits 从多个仓库中采集指定日期范围内的提交记录。
//
// 对每个仓库,按天遍历日期范围,逐天调用 API 拉取数据。
// 单天拉取失败时记录日志并继续,不中断整个采集流程。
//
// 参数:
// - cfg: 配置,包含 CNB Token 等认证信息
// - repos: 仓库列表,格式为 "org/repo"
// - since: 采集起始日期(含)
// - until: 采集截止日期(含)
//
// 返回:
// - []Commit: 按时间排序的提交记录
// - error: 仅在无法继续时返回
func collectCommits(cfg *Config, repos []string, since, until time.Time) ([]Commit, error) {
以前写注释我纠结的是"这个要不要写,那个写了会不会太啰嗦"。现在不纠结了——AI 先写一版,你只负责判断"对还是不对"。从创作变成了审校,难度降了一个数量级。
场景三:Code Review 没人做?让 AI 当第一道防线
我说句得罪人的话:大多数团队的 Code Review 形同虚设。
要么没人有时间认真看,要么看了也只看出"这行少了个空格"。真正有价值的逻辑审查——边界条件处理了吗、有空指针吗、SQL 注入了吗——很少有人能稳定地看出来。
我的方案:AI 审第一轮,人审第二轮。 AI 不会累、不会漏掉明显的坑、不会因为跟你是朋友就放水。
这是一段我故意埋了 3 个问题的代码:
func GetUserOrders(userID int, status string) ([]Order, error) {
db, err := sql.Open("mysql", dsn)
// 问题 1:db 没有 defer Close
// 问题 2:SQL 拼接,注入风险
query := "SELECT * FROM orders WHERE user_id = " + strconv.Itoa(userID)
if status != "" {
query += " AND status = '" + status + "'"
}
rows, err := db.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
var orders []Order
for rows.Next() {
var o Order
rows.Scan(&o.ID, &o.UserID, &o.Amount, &o.Status)
// 问题 3:Scan 返回值没有检查 error
orders = append(orders, o)
}
return orders, nil
}
丢给 AI,30 秒后:
发现 3 个问题:
🔴 高危:SQL 注入
query 使用字符串拼接构建,status 参数未做任何过滤。
建议:使用参数化查询 `WHERE user_id = ? AND status = ?`
🟡 中危:资源泄漏
sql.Open 返回的 db 连接没有关闭。
说明:sql.Open 创建的是连接池,应该在程序退出时调用 db.Close()
🟢 低危:错误忽略
rows.Scan() 的返回值被忽略,扫描失败时不会感知。
建议:检查 Scan 的 error 返回值
3 个问题全抓出来了。之前人工审查这段代码至少 10 分钟,还不一定能全看出来——尤其是 SQL 注入那个,嵌套在 if 里面,肉眼很容易跳过。
核心逻辑:不是让 AI 替代你审查,是让 AI 把明显的坑先扫一遍。你只需要关注 AI 标记出来的地方,以及 AI 看不出来的业务逻辑问题。10 分钟的活变成 2 分钟。
场景四:10 万行日志找问题?以前 2 小时,现在 5 分钟
做后端的最怕什么?产线出问题了,老板在群里 @你,你打开日志一看——10 万行。你不知道问题在哪,但你知道你必须在 30 分钟内找到。
传统做法:写脚本 → 正则提取 → awk 统计 → Excel 画图。一套下来 2 小时起步。等你找到问题,老板已经打了 3 个电话了。
AI 的做法:采样 → 丢给 AI → 读结果。
10 万行 Nginx 日志,我想知道 404 最多的接口是哪些:
func analyzeLogs(logFile string) {
data, _ := os.ReadFile(logFile)
lines := strings.Split(string(data), "\n")
// 从 10 万行里随机抽 500 行
samples := sample(lines, 500)
prompt := fmt.Sprintf(`以下是 Nginx 访问日志片段。请统计:
1. 404 状态码最多的 3 个接口路径
2. 平均响应时间异常(> 1s)的接口
3. 有没有明显的爬虫流量
只基于以下数据回答,不要推测:
%s`, strings.Join(samples, "\n"))
// 调用 DeepSeek
result := callLLM(prompt)
fmt.Println(result)
}
30 秒后:
1. 404 TOP 3:
- /api/v1/users/avatar (127次) — 用户头像接口404,怀疑CDN配置问题
- /wp-admin/admin-ajax.php (89次) — WordPress扫描流量
- /api/v1/legacy/config (43次) — 旧版接口已下线但仍有客户端在调
2. 响应时间异常:
- /api/v1/reports/generate 平均 3.2s — 报表生成接口需要优化
3. 爬虫流量:
- 大量 /api/v1/articles 请求来自非浏览器UA,疑似爬虫
它不只是统计数字,还给了分析——"怀疑 CDN 配置问题"、"旧版接口已下线但仍有客户端在调"。这跟你看着数据自己推断的结论是同一类东西,但快了几十倍。
关键洞察:AI 做数据分析的优势不是"算得准",而是快。你 2 小时也能得出同样的结论,但等你算完,黄花菜都凉了。
场景五:每周一早上的折磨?我让 Agent 全自动了
这是五个场景里最"狠"的一个——你还在睡觉,活已经干完了。
每周一早上写周报,打开 Git → 翻提交记录 → 回忆上周干了啥 → 拼成周报 → 发群里。每次 20-30 分钟,烦但不做不行的程度。
我写了一个 Agent,流程就三步:
每周一早上 7:00
→ 自动拉取 Git 提交记录
→ 丢给 DeepSeek 整理成周报
→ 推送到企业微信群
→ 你还没起床,周报已经在群里了
架构就三板斧:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 数据采集 │ ──→ │ AI 处理 │ ──→ │ 结果推送 │
│ Git API │ │ DeepSeek │ │ 企微消息 │
└──────────┘ └──────────┘ └──────────┘
这就是我开源的 daily-report-agent。代码 400 行,一个周末写出来的。
这个模式才是真正的价值所在:
| 你想做的 | 改哪里 |
|---|---|
| 监控告警分析 | 数据源改成 Prometheus API |
| 竞品动态追踪 | 数据源改成爬虫 |
| 日报汇总 | 数据源改成 Jira/TAPD |
| 发布检查清单 | 数据源改成 CI/CD 状态 |
变的只是第一步的数据源和最后一步的推送渠道,中间的 AI 处理逻辑是通用的。这是一个可以无限复用的模板。
说真话:AI 现在能做什么,不能做什么
我不是 AI 布道师,不卖课,不收徒。下面这些是我跑了一个月的真实结论:
能做的(2026 年 5 月实测)
| 任务类型 | 省时比例 | 一句话 |
|---|---|---|
| 样板代码生成 | 70-90% | 改几行就能用,最稳的场景 |
| 注释/文档生成 | 80% | 需要你确认准确性,但比自己写快 5 倍 |
| 代码审查第一轮 | 50-70% | 能扫出常见坑,逻辑审查还是得你来 |
| 数据提取与分析 | 80-90% | 数据量越小越准,采样是关键 |
| 定时自动工作流 | 95%+ | 流程固化场景最稳,基本上不用管 |
不能做的(别被卖课的把期望拉太高)
- 替代你理解业务:AI 不知道你们产品为什么设计成这样,也没必要知道
- 做架构决策:它能列出方案的优缺点,但不知道你的团队有几个人、下个月要上线
- 100% 可靠:每次生成的结果都不一样,永远要验证
- 跨系统调试:它能读代码,但不能 SSH 到你服务器上看日志
我的建议很简单
别想着"学 AI"。这个领域的教程已经多到让人焦虑了。
你就做一件事:找一个你每周都在做的机械性任务,试着用 AI 把它自动化掉。
不用是什么大项目。哪怕只是"每次写完函数自动补注释",也行。AI 给你省出来的第一个小时,就是你真正对它建立信心的时候。
我就是一个普通程序员,8 年经验。不是什么大神,也不是什么 AI 专家。这篇文章里的每一段代码,都是我自己跑过的。你复制下来就能用。
下一篇我会用 50 行 Go 代码,让你真正理解大语言模型是怎么工作的。不讲数学公式,不扯 Transformer 原理。一个能跑的程序,你改几个参数就能直观看到 Token、温度、上下文这三个概念的区别。
关注我,别错过。
🦞 一只用 AI Agent 搭副业产线的程序员
公众号:虾哥不加班 | B站:龙虾不加班 | 掘金:龙虾不加班
源码 & 工具:GitHub - lobster-bujiaban