Agent skill

go-performance

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.

Stars 206
Forks 10

Install this agent skill to your Project

npx add-skill https://github.com/caarlos0/dotfiles/tree/main/crush/skills/go-performance

SKILL.md

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

bash
# 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.

Expand your agent's capabilities with these related and highly-rated skills.

caarlos0/dotfiles

code-simplifier

Simplify and refine code for clarity, consistency, and maintainability while preserving functionality. Use when asked to "simplify", "clean up", or "refactor" code, after writing complex code that could benefit from simplification, or when code has grown hard to follow.

206 10
Explore
caarlos0/dotfiles

go-doc

Get documentation for any Go library using `go doc`. Use when asked about Go package documentation, API reference, function signatures, or how to use a specific Go library/package.

206 10
Explore
cj-vana/claude-swarm

swarm

Orchestrate parallel Claude Code worker swarms with protocol-based behavioral governance. Use for complex features, large refactors, or multi-step tasks. Supports behavioral constraints, parallel workers, and persistent state across context compactions.

85 7
Explore
kylehughes/the-unofficial-swift-programming-language-skill

programming-swift

Provides the complete content of 'The Swift Programming Language (6.3 beta)' book by Apple. Use this skill when you need to verify Swift syntax, look up language features, understand concurrency, resolve compiler errors, or consult the formal language reference.

43 1
Explore
kylehughes/the-unofficial-swift-concurrency-migration-skill

migrating-to-swift-concurrency

Provides the complete Swift Concurrency Migration Guide. Use when migrating to Swift 6, resolving data-race safety errors, understanding Sendable and actor isolation, or incrementally adopting async/await.

50 1
Explore
rakibdev/dotfiles

valibot

Valibot schema validation for backend and frontend forms.

1 0
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results