Best for
- Code contains make([]T, ...) or make(map[K]V, ...)
- Code builds strings in loops
- Code queries DB/Redis inside loops
johnqtcg/awesome-skills/skills/go-performance-review/SKILL.md
Review Go code for performance issues including slice/map pre-allocation, string concatenation, N+1 queries, connection pool configuration, sync.Pool, memory alignment, lock scope, buffered I/O, and HTTP transport tuning. Trigger when code contains make(), loops, database queries, string building, sync primitives, HTTP clients, or hot-path operations. Use for performance-focused review.
Decision brief
Review Go code for performance issues including slice/map pre-allocation, string concatenation, N+1 queries, connection pool configuration, sync. Pool, memory alignment, lock scope, buffered I/O, and HTTP transport tuning.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/johnqtcg/awesome-skills --skill "skills/go-performance-review"Inspect the Agent Skill "go-performance-review" from https://github.com/johnqtcg/awesome-skills/blob/d63cf368c1b106871b56454bd73c293701bef500/skills/go-performance-review/SKILL.md at commit d63cf368c1b106871b56454bd73c293701bef500. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Define scope — files/diff under review. Apply Generated Code Exclusion Gate. 2. Gather evidence — read changed files, identify performance-relevant patterns: make(), append(), loops, DB queries, strings.Builder, sync.Pool, HTTP clients. 3. Load references — always load go-per…
Performance only — not security, concurrency, quality, tests, errors, or logic
Identify performance issues and resource inefficiency in Go code. This skill exists because performance findings are almost all Medium severity and get systematically crowded out when mixed with High-severity Security/Concurrency findings.
Code contains make([]T, ...) or make(map[K]V, ...)
Security vulnerabilities → go-security-review
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 95/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 30 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Identify performance issues and resource inefficiency in Go code. This skill exists because performance findings are almost all Medium severity and get systematically crowded out when mixed with High-severity Security/Concurrency findings.
Important distinction: lock contention is performance (here); race condition is concurrency (go-concurrency-review).
This skill does NOT cover: security, concurrency correctness, code style, test quality, error handling, or business logic — those belong to sibling vertical skills.
make([]T, ...) or make(map[K]V, ...)go-security-reviewgo-concurrency-reviewgo-quality-reviewgo-error-reviewRead go.mod. Key: strings.Clone (1.20+), slices.Clone (1.21+).
MUST quote specific evidence. Category match alone insufficient.
Embedded anti-examples:
Exclude: *.pb.go, *_gen.go, mock_*.go.
make(), append(), loops, DB queries, strings.Builder, sync.Pool, HTTP clients.go-performance-patterns.md; load go-database-patterns.md when DB code present.This skill uses mechanical grep pre-scanning to guarantee zero missed checklist items. 11 of 13 items are grep-gated; 2 are semantic-only.
$TMPDIR/review_snippet.go)Include in Execution Status: Grep pre-scan: X/11 items hit, Z confirmed as findings (2 semantic-only)
This is the highest-priority compound pattern — it catches the most common performance miss:
make\(\[\] HITlen(input))make([]*User, 0) when len(userKeys) is available → FINDINGAll Medium severity unless marked (Low).
| # | Item | Quantification Pattern | Grep Pattern |
|---|---|---|---|
| 1 | Missing slice pre-allocation | make([]T, 0) when upper bound known → "N grow-and-copy → 1 allocation" | make\(\[\] (compound: AND NOT 3-arg make with capacity — check for make\(\[\][^,]+,\s*\d+,\s*\d+\) absent) |
| 2 | String concatenation in loop | += in loop → strings.Builder + Grow() — "N allocations + N copies → 1" | \+=\s*""|\+=\s*\w+\s*$ (compound: inside for loop — semantic confirmation) |
| 3 | N+1 query | Individual DB/Redis calls in loop → batch WHERE IN or pipeline — "N round-trips → 1" | \.Query|\.Exec|\.Get|\.Set (compound: inside for loop — N+1 detection) |
| 4 | Missing connection pool config | Missing SetMaxOpenConns, SetMaxIdleConns, SetConnMaxLifetime — connection exhaustion risk | SetMaxOpenConns|SetMaxIdleConns|SetConnMaxLifetime|sql\.Open|pgx\.Connect |
| 5 | Missing sync.Pool | Hot-path allocations without pooling; pool without Reset before Put — quantify allocation frequency | sync\.Pool |
| 6 | Struct memory alignment | Fields poorly ordered → fieldalignment tool — quantify savings in bytes per instance | Semantic-Only (struct field alignment requires counting fields and sizes) |
| 7 | Substring memory retention | Large string sliced, small substring retains backing array → strings.Clone (Go 1.20+) | strings\.Clone|[:]\w*\] (substring retention — semantic confirmation required) |
| 8 | Oversized lock scope | Mutex where atomic suffices; critical section includes non-critical I/O — quantify contention | sync\.Mutex|sync\.RWMutex|\.Lock\(\) (compound: check if lock held across I/O) |
| 9 | Missing sharded lock (Low) | Single mutex on high-contention data → sharded locks — only for proven bottleneck | Semantic-Only (sharded lock pattern requires understanding contention — rarely applicable) |
| 10 | Missing buffered I/O | Frequent small reads/writes without bufio — "5-50x syscall reduction" | os\.Open|os\.Create|os\.Write|os\.Read|net\.Conn (compound: AND NOT bufio\.) |
| 11 | Inefficient JSON encoding | json.Marshal/Unmarshal on stream → json.NewEncoder/Decoder — "eliminates []byte allocation" | json\.Marshal|json\.Unmarshal (compound: AND stream-compatible context — semantic) |
| 12 | Untuned HTTP Transport | http.DefaultClient without timeout; MaxIdleConnsPerHost default 2 too low for high-throughput | http\.DefaultClient|http\.Get|http\.Post|http\.Client |
| 13 | Missing Count-First guard in pagination query | Function returns (list, total) with a Count + Find pair but no zero-guard. Reorder to Count-First: run Count → if total == 0 return early → only then run Find. Eliminates Find DB round-trip (full row-data transfer) for empty result sets — common for new tenants, inactive users, sparse data. Anti-example: when business domain guarantees total always > 0 (seeded reference tables, system lookups). | \.Count\(& (compound: confirm .Find\( also present in same function AND no if.*total.*==.*0 or if total == 0 early-exit guard) |
Medium — Performance issue impacting latency, throughput, or resource usage under load.
Low — Minor optimization with limited real-world impact.
path:linefollow-up (performance issues are rarely must-fix)Go version: X.YGrep pre-scan: X/11 items hit, Z confirmed as findings (2 semantic-only)Excluded (generated): list or NoneReferences loaded: list1-2 lines. Count by severity.
### Findings
#### [Medium] Slice Pre-allocation Missing in Hot Path
- **ID:** PERF-001
- **Location:** `internal/service/batch.go:42`
- **Impact:** len(userIDs) allocations per request instead of 1 — slice grows via append in loop processing user batch
- **Evidence:** `results := make([]User, 0)` at L42; `results = append(results, user)` in loop at L48; `len(userIDs)` is known at L40
- **Recommendation:** `results := make([]User, 0, len(userIDs))`
- **Action:** follow-up
#### [Medium] N+1 Query in Order Processing
- **ID:** PERF-002
- **Location:** `internal/service/order.go:55-60`
- **Impact:** N database round-trips per batch — one SELECT per order item
- **Evidence:** `for _, item := range items { product, _ := repo.GetProduct(ctx, item.ProductID) }` — N individual queries
- **Recommendation:** Batch: `products, err := repo.GetProductsByIDs(ctx, productIDs)` with `WHERE id IN (?)`
- **Action:** follow-up
### Suppressed Items
#### [Suppressed] Slice Pre-allocation in Config Loading
- **Reason:** `make([]Plugin, 0)` at config.go:12 — cold path (called once at startup, typically <5 plugins). Anti-example: "small slice in cold path"
### Execution Status
- Go version: 1.21
- Excluded (generated): None
- References loaded: go-performance-patterns.md, go-database-patterns.md
### Summary
2 Medium findings (slice pre-allocation, N+1 query). Cold-path items suppressed.
If no issues found: state No performance findings identified. Still output Execution Status.
| Reference | Load When |
|---|---|
references/go-performance-patterns.md | Always |
references/go-database-patterns.md | Code involves database queries, connection pools |
references/go-review-anti-examples.md | Always |
Frequently asked questions
Review Go code for performance issues including slice/map pre-allocation, string concatenation, N+1 queries, connection pool configuration, sync. Pool, memory alignment, lock scope, buffered I/O, and HTTP transport tuning.
The source record exposes this install command: npx skills add https://github.com/johnqtcg/awesome-skills --skill "skills/go-performance-review". Inspect the command and pinned source before running it.
Alternatives
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing
oaustegard/claude-skills
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre