‹ 首页

go-performance

@caarlos0 · 收录于 昨天 · 上游提交 3 天前

Analyze and optimize Go program performance. Use when asked to profile Go code, find performance bottlenecks, analyze memory allocations, detect memory leaks, write benchmarks, or optimize CPU/memory usage.

适合你,如果正在用 Go 开发并遇到性能问题

/ 通过 npx 安装 校验哈希
npx oh-my-skill add caarlos0/dotfiles/go-performance
/ 通过 bash 安装
curl -fsSL https://oh-my-skill.com/install.sh | bash -s -- caarlos0/dotfiles/go-performance
/ 已经装过?验证本机副本,不用重装
npx oh-my-skill verify caarlos0/dotfiles/go-performance
安装目标可用 --agent / --scope 或 --to 明确指定;省略时只会在唯一已存在的 agent 目录上自动选择,零命中或多命中会停止并提示。content_hash 缺失或不一致均拒装。
216GitHub stars
~481上下文体积 · 单文件
索引托管

怎么用

技能原文 SKILL.md作者撰写 · MIT · c21bd70

Go Performance

Workflow
  1. Identify profile source (file, URL, or generate from tests/server)
  2. Analyze with go tool pprof
  3. Report findings with actionable recommendations
Quick Reference

| Profile | Test Flag | HTTP Endpoint | | --------- | ------------- | ------------------------ | | CPU | -cpuprofile | /debug/pprof/profile | | Heap | -memprofile | /debug/pprof/heap | | Goroutine | - | /debug/pprof/goroutine |

Key Commands
# Generate from benchmarks
go test -bench=. -cpuprofile cpu.prof -memprofile mem.prof

# Analyze (interactive or one-liner)
go tool pprof -top -cum cpu.prof
go tool pprof -http=:8080 cpu.prof  # web UI with flame graphs

# Memory analysis
go tool pprof -alloc_space -top mem.prof   # bytes allocated
go tool pprof -alloc_objects -top mem.prof # allocation count (GC pressure)

# Compare profiles (find leaks/regressions)
go tool pprof -base old.prof new.prof

# Filter results
go tool pprof -focus='mypackage.*' cpu.prof
Tips
  • Write a benchmark first to reproduce/confirm/measure the issue
  • Focus on quick wins first: easy fixes with high impact
  • If hotspots are in external libraries, still analyze - source is in $GOPATH
  • CPU profiles need 30+ seconds for meaningful data
  • For memory leaks: compare heap profiles at two points in time
  • Use -base flag to find regressions between profiles
Writing benchmarks

Every time we work on some performance issue, we should:

  • make sure there is a benchmark
  • if there isn't one, we create it, calling the function that we aim to improve

Then, we create a second benchmark, and a new production function with the changes we want.

This way we can quickly run and compare both benchmarks.

Once we're happy with the changes, we replace the old function and old benchmark with the new ones.

Commit messages should always have the benchmark results in them.

按 MIT 许可原样转载,未经改动 · 在 GitHub 查看 →

评论

登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。