Review Go code for adherence to Go Style Guide. Use when the user requests a code review of completed work, pull requests, or feature branches in Go projects. Focuses on critical bugs, race conditions, and important maintainability issues. Trigger phrases include "review this Go code", "check against style guide", "review my PR", or "review the work done so far".
/plugin marketplace add robbyt/claude-skills/plugin install swift-formatter@robbyt-claude-skillsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
references/api-design.mdreferences/concurrency.mdreferences/errors.mdreferences/review-checklist.mdreferences/style.mdreferences/testing.mdReview Go code against comprehensive style guide, focusing on critical bugs and important maintainability issues.
This guide assumes Go 1.25+ and does not consider backwards compatibility. All patterns use modern Go best practices.
Load references based on code patterns found during review:
| Code Pattern | Reference File |
|---|---|
go func(), sync.Mutex, sync., channels, atomic | references/concurrency.md |
err, error, panic, Must functions | references/errors.md |
interface, embedding, receivers, func New, init() | references/api-design.md |
slice/map return, slices.Clone, maps.Clone | references/api-design.md |
_test.go, t., b. | references/testing.md |
| naming, comments, logging | references/style.md |
Quick reference: references/review-checklist.md - critical patterns with code examples
Note: "Copying at boundaries" lives in api-design.md but relates to concurrency safety - check both when ownership/encapsulation is the concern.
Basic rules that don't need a file lookup:
net/url not net/urls)func (c *Client) Connect())errors.New("connection failed"))i, v), longer for large scopes (requestTimeout)Follow this 3-phase workflow for systematic code review:
Determine what code to review based on the user's request:
Pull Request / Branch Review:
# Get all changed files in branch
git diff --name-only main...HEAD | grep '\.go$'
# Get diff with context
git diff main...HEAD
Specific Files:
# User specifies file(s) directly
# Read the files using the Read tool
Recent Work:
# Review recent commits
git log --oneline -n 10
git diff HEAD~5..HEAD
Output: List of Go files and changes to review.
Review the code systematically using the bundled references:
Start with critical issues (load references/review-checklist.md for quick patterns):
Check important patterns:
Consult topic files as needed (see Reference Files table above):
Grep patterns for architectural issues:
# Find panic usage (context-dependent - init/main vs library)
rg 'panic\(' --type go
# Find goroutine launches (check lifecycle management)
rg '\bgo\s+' --type go
# Find os.Exit or log.Fatal (should only be in main)
rg '(os\.Exit|log\.Fatal)' --type go
# Find global var declarations (check for mutable state)
rg '^var\s+\w+\s*=' --type go
Structure the review with Critical and Important issues only (skip Minor issues per user preference).
Format:
## Code Review Summary
[1-2 sentence overview of code quality and adherence]
**Note**: This review focuses on architectural and semantic issues that require human judgment. For syntax, formatting, and common bugs (unhandled errors, type assertions, etc.), ensure `golangci-lint` is run separately.
## Critical Issues
[Issues that could cause bugs, panics, or data races - MUST fix]
### [Issue Title]
**Location**: `file.go:123` or `functionName()`
**Severity**: Critical
**Current Code**:
```go
[problematic code snippet]
Issue: [What's wrong and why it's critical]
Recommended:
[corrected code]
Guideline: [Reference to style guide section, e.g., "Error Handling > Type Assertions"]
[Issues affecting maintainability, performance, or style - Should fix]
[Use same format as Critical Issues]
[Acknowledge good practices: proper error wrapping, clean concurrency patterns, good test structure]
## Optional: Automated Linting Integration
Before or after manual review, suggest running automated linters for complementary coverage:
**If golangci-lint skill is available**:
"Consider running the `golangci-lint` skill for automated static analysis. Say 'run golangci-lint' to execute."
**Manual linting**:
```bash
# Run staticcheck
staticcheck ./...
# Run golangci-lint
golangci-lint run
Linter-Caught Issues:
Subjective Preferences (Do Not Flag):
testing.T parameter or returning errors acceptable; ensure t.Helper() usedWhen evaluating code, apply Google's Core Principles in order (from references/style.md):
Then apply specific review guidance:
Load references/review-checklist.md first for quick architectural patterns - it focuses on semantic issues requiring judgment.
Load topic-specific files based on code patterns (see Reference Files table):
concurrency.md - goroutines, mutexes, races, channelserrors.md - error types, wrapping, panic avoidanceapi-design.md - interfaces, function design, data boundariestesting.md - table tests, parallel tests, benchmarksstyle.md - naming, documentation, code styleImportant: Skip reporting issues that golangci-lint would catch. The agent should focus on design, architecture, and context-dependent patterns that require human understanding.
Some patterns have exceptions:
init() acceptable for database driver registrationpanic() acceptable in tests (use t.Fatal or t.FailNow)Apply judgment based on context and domain.