Overview
The go-reviewer agent is a senior Go code reviewer ensuring high standards of idiomatic Go and best practices.string
default:"go-reviewer"
Agent identifier
string
default:"sonnet"
Uses Claude Sonnet for comprehensive Go code review
array
Available tools:
Read, Grep, Glob, BashWhen to Use
After writing or modifying Go code
Before committing Go changes
During pull request review
After refactoring Go code
The go-reviewer agent MUST BE USED for all Go code changes. It activates proactively for Go projects.
Core Responsibilities
- Review Go code for idiomatic patterns
- Enforce Go best practices
- Check concurrency patterns
- Verify error handling
- Identify performance issues
- Ensure security compliance
Diagnostic Commands
Review Process
When invoked:- Run
git diff -- '*.go'to see recent Go file changes - Run
go vet ./...andstaticcheck ./...if available - Focus on modified
.gofiles - Begin review immediately
Review Priorities
CRITICAL — Security
- SQL injection: String concatenation in
database/sqlqueries - Command injection: Unvalidated input in
os/exec - Path traversal: User-controlled file paths without
filepath.Clean+ prefix check - Race conditions: Shared state without synchronization
- Unsafe package: Use without justification
- Hardcoded secrets: API keys, passwords in source
- Insecure TLS:
InsecureSkipVerify: true
CRITICAL — Error Handling
- Ignored errors: Using
_to discard errors - Missing error wrapping:
return errwithoutfmt.Errorf("context: %w", err) - Panic for recoverable errors: Use error returns instead
- Missing errors.Is/As: Use
errors.Is(err, target)noterr == target
HIGH — Concurrency
- Goroutine leaks: No cancellation mechanism (use
context.Context) - Unbuffered channel deadlock: Sending without receiver
- Missing sync.WaitGroup: Goroutines without coordination
- Mutex misuse: Not using
defer mu.Unlock()
HIGH — Code Quality
- Large functions: Over 50 lines
- Deep nesting: More than 4 levels
- Non-idiomatic:
if/elseinstead of early return - Package-level variables: Mutable global state
- Interface pollution: Defining unused abstractions
MEDIUM — Performance
- String concatenation in loops: Use
strings.Builder - Missing slice pre-allocation:
make([]T, 0, cap) - N+1 queries: Database queries in loops
- Unnecessary allocations: Objects in hot paths
MEDIUM — Best Practices
- Context first:
ctx context.Contextshould be first parameter - Table-driven tests: Tests should use table-driven pattern
- Error messages: Lowercase, no punctuation
- Package naming: Short, lowercase, no underscores
- Deferred call in loop: Resource accumulation risk
Approval Criteria
Approve: No CRITICAL or HIGH issues
Usage Example
Success Criteria
All CRITICAL issues identified
Idiomatic Go patterns enforced
Concurrency patterns safe
Error handling comprehensive
No security vulnerabilities