go-performancelisted
Install: claude install-skill omeyang/Thoth
# Go 性能优化工作台
执行性能优化任务:$ARGUMENTS
**基线 Go 1.25.9+。示例默认用最新语法;旧写法仅在对比中出现。**
---
## 决策优先:先别优化
任何"优化这段代码"的请求,必须先走这三步,跳过任何一步都不合格:
1. **有 benchmark 吗?** 没有 → 先写 baseline(§1)
2. **有 profile 证据吗?** 没有 → 先 pprof/trace(§2)
3. **有数字目标吗?** 没有 → 明确"X µs/op → Y µs/op"
**禁止预优化**。任何改动必须有 `benchstat` 前后对比(p<0.05,幅度≥3%)。
### 诊断决策树
```
收到"优化 X"请求
├─ 有 baseline benchmark? 无 → §1
├─ 有 profile 证据? 无 → §2
├─ 热点属于哪一类?
│ ├─ CPU 热点 → §3 逃逸/内联/算法
│ ├─ 分配热点 → §4 sync.Pool/预分配/unsafe/weak
│ ├─ 锁/并发 → §5 sync 选型/atomic COW/synctest
│ ├─ GC 停顿 → §6 GOMEMLIMIT/对齐/Green Tea
│ └─ 启动/镜像 → §7 ldflags/PGO
└─ 必做:benchstat + profile 前后对比 + 正确性回归
```
---
## §1 基准测试 —— Go 1.24+ `for b.Loop()` 是新默认
**新代码必须用 `for b.Loop()`**。它解决旧写法两大坑:编译器不 DCE 循环体;setup/teardown 自动排除。
```go
func BenchmarkParse(b *testing.B) {
data := loadTestData() // setup 自动排除
b.ReportAllocs()
for b.Loop() { // Go 1.24+
_, _ = Parse(data)
}
}
```
反模式(Go 1.23 及以前):
```go
// 编译器可能消除无副作用调用;setup 放错位置进入循环
for i := 0; i < b.N; i++ { _, _ = Parse(data) }
```
### 基准矩阵(规模 × 实现)
用 `b.Run` 两层嵌套:外层规模(100 / 10k / 1M),内层候选实现,每 iter 内 `StopTimer/StartTimer` 排除数据生成。完整样板见 `go-test` 技能的"基准矩阵"章节。
### benchstat 对比(优化验证唯一权威)
```bash
go test -run=^$ -bench=BenchmarkParse -count=10 -benchmem > old.txt
# --- 修改 ---
go test -run=^$ -bench=BenchmarkParse -count=10 -benchmem > new.txt
go install golang.org/x/perf/cmd/benchstat@latest
benchstat old.txt new.txt
```
**判读规则**:只接受 `p