From golang-skills
Sets up Go linting with golangci-lint: generates configuration, selects linters, and adds checks to CI/CD pipelines. Use when starting new Go projects or enforcing code quality.
How this skill is triggered — by the user, by Claude, or both
Slash command
/golang-skills:go-lintingThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
More important than any "blessed" set of linters: **lint consistently across a codebase**.
More important than any "blessed" set of linters: lint consistently across a codebase.
Consistent linting helps catch common issues and establishes a high bar for code quality without being unnecessarily prescriptive.
scripts/setup-lint.sh - Run when generating a .golangci.yml, validating the first lint pass, or producing JSON metadata.assets/golangci.yml - Use as the v2 golangci-lint baseline for established projects..golangci.yml with scripts/setup-lint.sh or copy assets/golangci.ymlgolangci-lint run ./...After generating .golangci.yml, run golangci-lint config verify --config .golangci.yml
to verify the configuration schema before relying on lint results.
These linters catch the most common issues while maintaining a high quality bar:
| Linter | Purpose |
|---|---|
| errcheck | Ensure errors are handled |
| goimports | Format code and manage imports |
| revive | Common style mistakes (modern replacement for golint) |
| govet | Analyze code for common mistakes |
| staticcheck | Various static analysis checks |
Note:
reviveis the modern, faster successor to the now-deprecatedgolint.
Use golangci-lint as your lint runner. See the example .golangci.yml from uber-go/guide.
Use assets/golangci.yml as the maintained example. It targets
golangci-lint v2 (verified with 2.10.1 on 2026-06-19), keeps goimports
under formatters, and enables the core linters plus common production
additions.
# Install the version this skill's config is verified against
go install github.com/golangci/golangci-lint/v2/cmd/[email protected]
# Run all linters
golangci-lint run
# Run on specific paths
golangci-lint run ./pkg/...
Beyond the minimum set, consider these for production projects:
| Linter | Purpose | When to enable |
|---|---|---|
| gosec | Security vulnerability detection | Always for services handling user input |
| ineffassign | Detect ineffectual assignments | Always — catches dead code |
| misspell | Correct common misspellings in comments/strings | Always |
| gocyclo | Cyclomatic complexity threshold | When functions exceed ~15 complexity |
| exhaustive | Ensure switch covers all enum values | When using iota enums |
| bodyclose | Detect unclosed HTTP response bodies | Always for HTTP client code |
When suppressing a lint finding, always explain why:
//nolint:errcheck // fire-and-forget logging; error is not actionable
_ = logger.Sync()
Rules:
//nolint:lintername — never bare //nolint//Run golangci-lint run ./... in CI after tests. Pin the golangci-lint version
used by CI so local and release behavior do not drift.
#!/bin/sh
# .git/hooks/pre-commit
golangci-lint run --new-from-rev=HEAD~1
Use --new-from-rev to lint only changed code, keeping the feedback loop fast.
| Task | Command/Action |
|---|---|
| Install golangci-lint | go install github.com/golangci/golangci-lint/v2/cmd/[email protected] |
| Run linters | golangci-lint run |
| Run on path | golangci-lint run ./pkg/... |
| Config file | .golangci.yml in project root |
| CI integration | Run golangci-lint run in pipeline |
| Nolint directives | //nolint:name // reason — never bare //nolint |
| CI integration | Use golangci/golangci-lint-action for GitHub Actions |
| Pre-commit | golangci-lint run --new-from-rev=HEAD~1 |
| When you need... | Use |
|---|---|
| Error handling coverage | errcheck |
| Import formatting | goimports |
| Style consistency | revive |
| Bug detection | govet, staticcheck |
| All of the above | golangci-lint with config |
npx claudepluginhub cxuu/golang-skills --plugin golang-skillsConfigures golangci-lint with best-practice .golangci.yml, interprets lint output and nolint directives, and selects linters for Go projects.
Detects optimal method to run golangci-lint in Go repositories (scripts, Makefile, direct, install) and reports structured issue summary.
Reviews Go code against community style standards, covering formatting, documentation, and error handling. Use before submitting a Go PR or during review.