go-performance
Use when writing, reviewing, or optimizing Go code for performance. Covers string operations, memory allocation, preallocating slices and maps, strings.Builder, strconv, container-aware GOMAXPROCS, and runtime considerations for Go 1.25.
Best use case
go-performance is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use when writing, reviewing, or optimizing Go code for performance. Covers string operations, memory allocation, preallocating slices and maps, strings.Builder, strconv, container-aware GOMAXPROCS, and runtime considerations for Go 1.25.
Teams using go-performance should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/go-performance/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How go-performance Compares
| Feature / Agent | go-performance | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use when writing, reviewing, or optimizing Go code for performance. Covers string operations, memory allocation, preallocating slices and maps, strings.Builder, strconv, container-aware GOMAXPROCS, and runtime considerations for Go 1.25.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Go Performance
Performance optimization patterns for production Go.
## Prefer strconv Over fmt
`strconv` is faster for primitive conversions.
```go
// Slower
s := fmt.Sprintf("%d", n)
// Faster
s := strconv.Itoa(n)
```
## Avoid Repeated String to Byte Conversions
```go
// Wrong: converts on every iteration
for i := 0; i < n; i++ {
w.Write([]byte("hello"))
}
// Correct
data := []byte("hello")
for i := 0; i < n; i++ {
w.Write(data)
}
```
## Specify Map Capacity
```go
// Wrong
m := make(map[string]int)
// Correct when size is known
m := make(map[string]int, len(items))
```
## Preallocate Slice Capacity
```go
// Wrong
var result []Item
for _, v := range input {
result = append(result, transform(v))
}
// Correct
result := make([]Item, 0, len(input))
for _, v := range input {
result = append(result, transform(v))
}
```
## Use strings.Builder for Concatenation
```go
// Wrong: creates many allocations
var s string
for _, part := range parts {
s += part
}
// Correct
var b strings.Builder
b.Grow(totalLen) // optional: preallocate
for _, part := range parts {
b.WriteString(part)
}
s := b.String()
```
## Container-Aware GOMAXPROCS (Go 1.25+)
Go 1.25 automatically adjusts GOMAXPROCS based on container CPU limits.
```go
// On Linux with cgroups, GOMAXPROCS now considers:
// - CPU bandwidth limits (CPU limit in Kubernetes)
// - Changes dynamically if limits change
// Automatic behavior is disabled if you set GOMAXPROCS explicitly:
// - Via GOMAXPROCS environment variable
// - Via runtime.GOMAXPROCS() call
```
This means Go programs in containers perform better out-of-the-box without manual GOMAXPROCS tuning.
## Resource Management (Go 1.24+)
### runtime.AddCleanup
Prefer `runtime.AddCleanup` over `runtime.SetFinalizer` for cleanup operations.
```go
func NewResource() *Resource {
r := &Resource{handle: allocHandle()}
runtime.AddCleanup(r, func(handle uintptr) {
freeHandle(handle)
}, r.handle)
return r
}
```
Advantages over `SetFinalizer`:
- Multiple cleanups per object
- Works with interior pointers
- No cycle-related leaks
- Object freed promptly (single GC cycle)
### Weak Pointers (Go 1.24+)
The `weak` package provides weak references that don't prevent garbage collection.
```go
import "weak"
type Cache struct {
mu sync.Mutex
items map[string]weak.Pointer[ExpensiveResource]
}
func (c *Cache) Get(key string) *ExpensiveResource {
c.mu.Lock()
defer c.mu.Unlock()
if wp, ok := c.items[key]; ok {
if r := wp.Value(); r != nil {
return r
}
delete(c.items, key)
}
return nil
}
```
Use cases: caches, canonicalization maps, observer patterns.Related Skills
go-testing
Use when writing, reviewing, or debugging Go tests and benchmarks. Covers table-driven tests, parallel execution, go-cmp, T.Context, T.Chdir, b.Loop, synctest for deterministic concurrency testing, and test failure messages.
go-security
Use when writing, reviewing, or auditing Go code for security. Covers input validation, SQL injection prevention, path traversal, secrets management, cryptography, HTTP security headers, and dependency scanning.
go-project-layout
Use when starting a new Go project, organizing packages, or restructuring an existing Go codebase. Covers standard directory layout, package design, Makefile targets, Dockerfile patterns, and module setup.
go-linting
Use when setting up linting, configuring golangci-lint, or fixing linter warnings in Go projects. Provides recommended linter sets, golangci-lint configuration, CI integration, and Makefile targets.
go-error-handling
Use when writing, reviewing, or debugging Go error handling code. Covers error wrapping, sentinel errors, custom error types, error joining, single handling, and error flow patterns. Based on Google and Uber style guides.
go-concurrency
Use when writing, reviewing, or debugging concurrent Go code. Covers goroutine lifecycle management, channels, errgroup, mutexes, atomics, sync.Map, and synchronous-first design. Based on Google and Uber style guides.
go-code-review
Use when reviewing Go code or preparing code for review. Quick-reference checklist covering naming, error handling, concurrency, testing, imports, documentation, and common pitfalls. Based on Go Wiki CodeReviewComments.
golang
Use when writing, reviewing, or refactoring Go code. Provides production best practices for Go covering error handling, concurrency, naming, testing, performance, generics, iterators, and common pitfalls. Distilled from Google Go Style Guide, Uber Go Style Guide, Effective Go, and Go Code Review Comments. Updated for Go 1.25.
pandas-performance
Advanced sub-skill for pandas focused on memory optimization, execution speed, and handling large-scale datasets (10M+ rows). Covers low-level dtypes, efficient indexing, and vectorization of complex logic.
performance-analyst
Use when reviewing hot paths, slow code, database queries, N+1 risks, memory usage, loops, I/O, caching strategy, concurrency, latency-sensitive paths, or resource efficiency.
wp-performance
Use when investigating or improving WordPress performance (backend-only agent): profiling and measurement (WP-CLI profile/doctor, Server-Timing, Query Monitor via REST headers), database/query optimization, autoloaded options, object caching, cron, HTTP API calls, and safe verification.
performance-optimization
Use when performance is a real concern — measure first, isolate the bottleneck, and prove the improvement instead of guessing