Source profileQuality 95/100

johnqtcg/awesome-skills/skills/go-performance-review/SKILL.md

go-performance-review

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.

Source repository stars
30
Declared platforms
0
Static risk flags
0
Last source update
2026-08-22
Source checked
2026-08-25

Decision brief

What it does: where it fits

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.

Best for

  • Code contains make([]T, ...) or make(map[K]V, ...)
  • Code builds strings in loops
  • Code queries DB/Redis inside loops

Not for

  • Security vulnerabilities → go-security-review
  • Race conditions, goroutine leaks → go-concurrency-review

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/johnqtcg/awesome-skills --skill "skills/go-performance-review"
Safe inspection promptEditorial

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

What the source asks the agent to do

  1. 01

    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…

    Define scope — files/diff under review. Apply Generated Code Exclusion Gate.Gather evidence — read changed files, identify performance-relevant patterns: make(), append(), loops, DB queries, strings.Builder, sync.Pool, HTTP clients.Load references — always load go-performance-patterns.md; load go-database-patterns.md when DB code present.
  2. 02

    Review Discipline

    Performance only — not security, concurrency, quality, tests, errors, or logic

    Performance only — not security, concurrency, quality, tests, errors, or logicExecute ALL 13 checklist items — this is the most commonly skipped dimension; isolation solves thatDistinguish hot-path vs cold-path: only flag frequently executed code
  3. 03

    Purpose

    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.

    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/C…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.
  4. 04

    When To Use

    Code contains make([]T, ...) or make(map[K]V, ...)

    Code contains make([]T, ...) or make(map[K]V, ...)Code builds strings in loopsCode queries DB/Redis inside loops
  5. 05

    When NOT To Use

    Security vulnerabilities → go-security-review

    Security vulnerabilities → go-security-reviewRace conditions, goroutine leaks → go-concurrency-reviewCode style/lint → go-quality-review

Permission review

Static risk signals and limitations

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

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score95/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars30SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
johnqtcg/awesome-skills
Skill path
skills/go-performance-review/SKILL.md
Commit
d63cf368c1b106871b56454bd73c293701bef500
License
MIT
Collected
2026-08-25
Default branch
main
View the original SKILL.md

Go Performance Review

Purpose

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.

When To Use

  • Code contains make([]T, ...) or make(map[K]V, ...)
  • Code builds strings in loops
  • Code queries DB/Redis inside loops
  • Code configures connection pools or HTTP clients
  • Code runs on hot paths (per-request, high-frequency)

When NOT To Use

  • Security vulnerabilities → go-security-review
  • Race conditions, goroutine leaks → go-concurrency-review
  • Code style/lint → go-quality-review
  • Error handling → go-error-review

Mandatory Gates

1) Go Version Gate

Read go.mod. Key: strings.Clone (1.20+), slices.Clone (1.21+).

2) Anti-Example Suppression Gate

MUST quote specific evidence. Category match alone insufficient.

Embedded anti-examples:

  • "Should pre-allocate slice" — when slice is small (<16 elements) or size is truly unknown at creation time. Must cite evidence the slice is large and size is known.
  • "Should use sync.Pool" — when object is small and allocated infrequently (cold path, startup, config).
  • "Struct fields should be reordered" — when struct has <4 fields or alignment savings <8 bytes.
  • "Should use strings.Clone" — when both substring and parent are short-lived locals in same GC scope.
  • "Add Count-First guard" — when the business domain guarantees the query always returns rows (e.g., seeded reference data, system-level lookups). Must cite evidence that total==0 is impossible in practice.
  • Hot-path rule: Do NOT flag performance issues in cold-path code (startup, one-time init, config loading, test setup, CLI argument parsing). Must cite evidence of hot-path execution: "called per HTTP request", "inside for loop over N items", "in handler serving N QPS".

3) Generated Code Exclusion Gate

Exclude: *.pb.go, *_gen.go, mock_*.go.

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-performance-patterns.md; load go-database-patterns.md when DB code present.
  4. Classify hot-path vs cold-path — only flag issues in frequently executed code. Cite execution frequency evidence.
  5. Evaluate ALL 13 checklist items with quantification → suppress cold-path items → format output.

Grep-Gated Execution Protocol

This skill uses mechanical grep pre-scanning to guarantee zero missed checklist items. 11 of 13 items are grep-gated; 2 are semantic-only.

Execution Order

  1. Identify target files (from dispatch prompt, or write raw snippet to $TMPDIR/review_snippet.go)
  2. Run grep for all grep-gated checklist items against target files
  3. HIT → run semantic analysis to confirm or reject (verify hot-path, quantify impact)
  4. MISS → auto-mark NOT FOUND, skip semantic analysis
  5. For compound patterns: run primary grep, then check secondary condition
  6. For semantic-only items (items 6, 9): full model reasoning
  7. Report only FOUND items

Grep Audit Line

Include in Execution Status: Grep pre-scan: X/11 items hit, Z confirmed as findings (2 semantic-only)

Key Compound Pattern: Slice Pre-allocation (Item 1)

This is the highest-priority compound pattern — it catches the most common performance miss:

  • Primary: make\(\[\] HIT
  • Secondary: check if the make call has only 2 args (no capacity) AND an upper bound is known (e.g., len(input))
  • Example: make([]*User, 0) when len(userKeys) is available → FINDING

Performance Checklist (12 Items)

All Medium severity unless marked (Low).

#ItemQuantification PatternGrep Pattern
1Missing slice pre-allocationmake([]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)
2String concatenation in loop+= in loop → strings.Builder + Grow() — "N allocations + N copies → 1"\+=\s*""|\+=\s*\w+\s*$ (compound: inside for loop — semantic confirmation)
3N+1 queryIndividual 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)
4Missing connection pool configMissing SetMaxOpenConns, SetMaxIdleConns, SetConnMaxLifetime — connection exhaustion riskSetMaxOpenConns|SetMaxIdleConns|SetConnMaxLifetime|sql\.Open|pgx\.Connect
5Missing sync.PoolHot-path allocations without pooling; pool without Reset before Put — quantify allocation frequencysync\.Pool
6Struct memory alignmentFields poorly ordered → fieldalignment tool — quantify savings in bytes per instanceSemantic-Only (struct field alignment requires counting fields and sizes)
7Substring memory retentionLarge string sliced, small substring retains backing array → strings.Clone (Go 1.20+)strings\.Clone|[:]\w*\] (substring retention — semantic confirmation required)
8Oversized lock scopeMutex where atomic suffices; critical section includes non-critical I/O — quantify contentionsync\.Mutex|sync\.RWMutex|\.Lock\(\) (compound: check if lock held across I/O)
9Missing sharded lock (Low)Single mutex on high-contention data → sharded locks — only for proven bottleneckSemantic-Only (sharded lock pattern requires understanding contention — rarely applicable)
10Missing buffered I/OFrequent small reads/writes without bufio — "5-50x syscall reduction"os\.Open|os\.Create|os\.Write|os\.Read|net\.Conn (compound: AND NOT bufio\.)
11Inefficient JSON encodingjson.Marshal/Unmarshal on stream → json.NewEncoder/Decoder — "eliminates []byte allocation"json\.Marshal|json\.Unmarshal (compound: AND stream-compatible context — semantic)
12Untuned HTTP Transporthttp.DefaultClient without timeout; MaxIdleConnsPerHost default 2 too low for high-throughputhttp\.DefaultClient|http\.Get|http\.Post|http\.Client
13Missing Count-First guard in pagination queryFunction 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)

Severity Rubric

Medium — Performance issue impacting latency, throughput, or resource usage under load.

Low — Minor optimization with limited real-world impact.

Evidence Rules

  • Quantify when possible: "N+1 executes N round-trips", "slice grows through log2(N) allocations"
  • For pre-allocation: state the known upper bound and current allocation
  • Hot-path requirement: cite evidence code runs frequently (per-request, in loop, high-QPS handler)
  • Do NOT flag cold-path optimizations
  • Merge rule: same issue at ≥3 locations → one finding with location list

Output Format

Findings

[Medium|Low] Short Title

  • ID: PERF-NNN
  • Location: path:line
  • Impact: Quantified performance consequence (allocations, syscalls, round-trips)
  • Evidence: Current code vs optimal pattern
  • Recommendation: Specific fix with code example
  • Action: follow-up (performance issues are rarely must-fix)

Suppressed Items

[Suppressed] Short Title

  • Reason: Anti-example matched + evidence cited (cold-path, small size, etc.)

Execution Status

  • Go version: X.Y
  • Grep pre-scan: X/11 items hit, Z confirmed as findings (2 semantic-only)
  • Excluded (generated): list or None
  • References loaded: list

Summary

1-2 lines. Count by severity.

Example Output

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

No-Finding Case

If no issues found: state No performance findings identified. Still output Execution Status.

Load References Selectively

ReferenceLoad When
references/go-performance-patterns.mdAlways
references/go-database-patterns.mdCode involves database queries, connection pools
references/go-review-anti-examples.mdAlways

Review Discipline

  • Performance only — not security, concurrency, quality, tests, errors, or logic
  • Execute ALL 13 checklist items — this is the most commonly skipped dimension; isolation solves that
  • Distinguish hot-path vs cold-path: only flag frequently executed code
  • Quantify impact — "costs N allocations per request" is better than "suboptimal"

Frequently asked questions

What to verify before installation and use

What does the go-performance-review source document cover?

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.

How do I install go-performance-review?

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

Compare before choosing

Computed 10029,034

garrytan/gbrain

bulk-ingestion

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.

Computed 10024,921

alirezarezvani/claude-skills

app-store-optimization

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

Computed 1005,241

dotnet/skills

migrate-vstest-to-mtp

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

Computed 100147

oaustegard/claude-skills

featuring

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