Agent skill
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.
Install this agent skill to your Project
npx add-skill https://github.com/saisudhir14/claude-skills/tree/main/skills/go-code-review
Metadata
Additional technical details for this skill
- tags
- golang go code-review checklist linting style
- author
- saisudhir14
- category
- languages
SKILL.md
Go Code Review Checklist
Quick-reference checklist for reviewing Go code. Each item links to deeper guidance in the parent skill.
Naming
- MixedCaps used (no underscores)
- Initialisms are consistent case (URL, ID, HTTP)
- Variable names match scope (short for local, descriptive for global)
- Receiver names are 1-2 letters, consistent across methods
- Package names are lowercase single words, no util/common/misc
- No name repetition (package.Method, not package.PackageMethod)
Error Handling
- Errors returned, not panicked (production code)
- Error wrapping uses
%wor%vappropriately - Error context is succinct (no "failed to" chains)
- Errors handled once (not logged AND returned)
- Error strings are lowercase, no trailing punctuation
- Happy path at minimal indentation (error-first)
- Sentinel errors use
Errprefix, error types useErrorsuffix
Concurrency
- Channel buffers are 0 or 1 (or justified)
- Goroutine lifetimes are documented
- errgroup used for error-returning goroutines
- Functions are synchronous unless concurrency is essential
- Mutexes are zero-value, unexported, not embedded in public structs
- Typed atomics used (Go 1.19+)
Testing
- Table-driven tests with named subtests
- Subtests run in parallel where safe
- go-cmp used for struct comparisons
- Failure messages include input, got, want
- t.Fatal for setup errors, t.Error for test assertions
- Interfaces defined in consumer packages
Imports
- Three groups: stdlib, external, internal
- No unnecessary renames
- No dot imports (except circular dep tests)
- Blank imports only in main/tests
Structs
- Field names used in initialization (no positional)
- Zero value fields omitted
- Types not embedded in public structs
- JSON field tags on marshaled structs
Slices and Maps
- Nil slices preferred over empty slices
- Copied at boundaries to prevent mutation
- Capacity preallocated when size is known
- Standard library slices/maps packages used
Performance
- strconv used over fmt for conversions
- No repeated string-to-byte conversions
- Map and slice capacity preallocated
- strings.Builder used for concatenation
Documentation
- Exported declarations have doc comments
- Comments are full sentences starting with declared name
- Package has package comment
Patterns
- Functional options for complex constructors
- Interface compliance verified at compile time
- defer used for resource cleanup
- Context is first parameter
- No mutable globals (dependency injection instead)
- Type assertions use two-value form
- time.Duration used instead of raw integers
- Enums start at one (zero = invalid)
Common Gotchas
- No loop variable capture bugs (Go 1.22+ or shadowed)
- Defer argument evaluation understood
- Nil interface vs nil pointer handled correctly
- Error checked before using result
- No map iteration order dependency
- Slice append backing array understood
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
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-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-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-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-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.
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.
Didn't find tool you were looking for?