Use when reviewing Go code or checking code against community style standards. Also use proactively before submitting a Go PR or when reviewing any Go code changes, even if the user doesn't explicitly request a style review. Does not cover language-specific syntax — delegates to specialized skills.
Use when reviewing Go code or checking code against community style standards. Also use proactively before submitting a Go PR or when reviewing any Go code changes, even if the user doesn't explicitly request a style review. Does not cover language-specific syntax — delegates to specialized skills.
allowed-tools
Bash(bash:*)
Go Code Review Checklist
Compatibility: references/WEB-SERVER.md uses log/slog examples that require Go 1.21+.
Resource Routing
assets/review-template.md - Use when formatting review output with Must Fix, Should Fix, and Nits sections.
scripts/pre-review.sh - Run before manual review to collect gofmt, go vet, and golangci-lint results.
references/WEB-SERVER.md - Read when reviewing an HTTP server that combines concurrency, context, logging, error handling, and shutdown behavior.
Review Procedure
Use assets/review-template.md when formatting the output of a code review to ensure consistent structure with Must Fix / Should Fix / Nits severity grouping.
Run gofmt -d . and go vet ./... to catch mechanical issues first
Read the diff file-by-file; for each file, check the categories below in order
Flag issues with specific line references and the rule name
After reviewing all files, re-read flagged items to verify they're genuine issues
Summarize findings grouped by severity (must-fix, should-fix, nit)
Validation: After completing the review, re-read the diff once more to verify every flagged issue is real. Remove any finding you cannot justify with a specific line reference.
Formatting
gofmt: Code is formatted with gofmt or goimports → go-linting
Documentation
Comment sentences: Comments are full sentences starting with the name being described, ending with a period → go-documentation
Doc comments: All exported names have doc comments; non-trivial unexported declarations too → go-documentation
Package comments: Package comment appears adjacent to package clause with no blank line → go-documentation
Named result parameters: Only used when they clarify meaning (e.g., multiple same-type returns), not just to enable naked returns → go-documentation
Error Handling
Handle errors: No discarded errors with _; handle, return, or (exceptionally) panic → go-error-handling
Error strings: Lowercase, no punctuation (unless starting with proper noun/acronym) → go-error-handling
In-band errors: No magic values (-1, "", nil); use multiple returns with error or ok bool → go-error-handling
Indent error flow: Handle errors first and return; keep normal path at minimal indentation → go-error-handling
Naming
MixedCaps: Use MixedCaps or mixedCaps, never underscores; unexported is maxLength not MAX_LENGTH → go-naming