Golang Benchmark

Workflow di benchmarking Go statisticamente rigoroso, profilazione pprof e regressione benchstat

di samber · samber/cc-skills-golang

Promosso ★ 9.2/10

Golang Benchmark — Workflow di benchmarking Go statisticamente rigoroso, profilazione pprof e regressione benchstat

Cosa fa

Guida alla scrittura e all'esecuzione di benchmark Go (b.Loop()/b.N, ReportAllocs, sub-benchmark), alla profilazione dei percorsi critici con pprof/trace e al confronto di varianti con le statistiche basate sul p-value di benchstat, oltre al gating di regressione CI e alle metriche di runtime di produzione Prometheus. Si attiva quando uno sviluppatore deve scrivere, eseguire o confrontare benchmark Go, interpretare profili CPU/memoria o indagare una specifica regressione delle prestazioni.

Rapporto di test

Installato Go 1.26.5 e benchstat (il comando di installazione da Dependencies ha funzionato alla lettera) ed eseguito il workflow documentato su un modulo reale: concatenazione ingenua vs. strings.Builder, ReportAllocs + b.Loop() + -count=10 + benchstat ha prodotto -81.50% sec/op (p=0.000, n=10), -88.68% B/op, -92.86% allocs/op esattamente nel formato di commit a tre tabelle descritto in SKILL.md. La baseline non gestita è stata eseguita una volta e ha ottenuto 324.1 -> 59.46 ns/op senza allocazioni o statistiche — benchstat ha mostrato una diffusione di ±105% per la vecchia versione, il che significa che il numero di baseline era casuale, anche se ne ha indovinato la direzione. Rispetto al nostro test del 10.07, l'autore ha aggiunto una nuova sezione 'File and Ordering Conventions' (versione 1.2.5 -> 1.2.6): benchmark in un file separato denominato come la sorgente (parser.go -> parser_bench_test.go) e ordine Benchmark* come nella sorgente. La convenzione in sé è innocua, ma la sua giustificazione è stata verificata e trovata errata: una fixture con errori di tipo è stata inserita in _bench_test.go — `go test -run . -short` ha comunque fallito la compilazione, e `go test -bench=.` ha comunque eseguito TestJoin, il che significa che la separazione dei file non fornisce né 'do not compile bench-fixtures' né 'output senza rumore Test*-noise'. Il core della skill è intatto, quindi il verdetto rimane lo stesso, ma docs 5 -> 4 per questa falsa giustificazione.

Testato il: 2026-07-10 · Claude Code 2.x (agent harness)

Installazione

git clone https://github.com/samber/cc-skills-golang.git
mkdir -p ~/.claude/skills
cd cc-skills-golang && cp -r skills/golang-benchmark ~/.claude/skills/golang-benchmark

Comandi e prompt di esempio

  • /golang-benchmarkWorkflow di benchmarking Go statisticamente rigoroso, profilazione pprof e regressione benchstat

Gli skill si attivano con richieste in linguaggio naturale, senza comandi da ricordare. Dopo l'installazione, prompt come questi lo attivano (in inglese):

  • Write a Go benchmark for this hot function using b.Loop
  • Compare these two benchmark variants with benchstat
  • Profile this Go service's CPU usage with pprof