go-linting
Use when setting up linting for a Go project, configuring golangci-lint, or adding Go checks to a CI/CD pipeline. Also use when starting a new Go project and deciding which linters to enable, even if the user only asks about "code quality" or "static analysis" without mentioning specific linter name
By cxuu · 1,134 installs
npx skills add cxuu/golang-skills --skill go-linting
Source repository · Upstream listing
Go Linting
Core Principle
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.
Resource Routing
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.
Setup Procedure
1. Create .golangci.yml with scripts/setup lint.sh or copy assets/golangci.yml
2. Run golangci lint run ./...
3. If errors appear, fix them category by category (formatting first, then vet, then style)
4. Re run until clean
After generating .golangci.yml , run golangci lint config verify config .golangci.yml
to verify the configuration schema before relying on lint results.
Minimum Recommended Linters
These linters catch the most common issues while maintaining a high quality bar:
Linter Purpose
[errcheck](https://github.com/kisielk/errcheck) Ensure errors are handled
[goimports](https://pkg.go.dev/golang.org/x/tools/cmd/goimports) Format code and manage imports
[revive](https://github.com/mgechev/revive) Common style mistakes (modern replacement for golint)
[govet](https://pkg.go.dev/cmd/vet) Analyze code for common mistakes
[staticcheck](https://staticcheck.dev) Various static analysis checks
Note : revive is the modern, faster successor to the now deprecated golint .
Lint Runner: golangci lint
Use [golangci lint](https://github.com/golangci/golangci lint) as your lint runner. See the [example .golangci.yml](https://github.com/uber go/guide/blob/master/.golangci.yml) from uber go/guide.
Example Configuration
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.
Running
Additional Recommended Linters
Beyond the minimum set, consider these for production projects:
Linter Purpose When to enable
[gosec](https://github.com/securego/gosec) Security vulnerability detection Always for services handling user input
[ineffassign](https://github.com/gordonklaus/ineffassign) Detect ineffectual assignments Always — catches dead code
[misspell](https://github.com/client9/misspell) Correct common misspellings in comments/strings Always
[gocyclo](https://github.com/fzipp/gocyclo) Cyclomatic complexity threshold When functions exceed ~15 complexity
[exhaustive](https://github.com/nishanths/exhaustive) Ensure switch covers all enum values When using iota enums
[bodyclose](https://github.com/timakin/bodyclose) Detect unclosed HTTP response bodies Always for HTTP client code
Nolint Directives
When suppressing a lint finding, always explain why:
Rules:
Use //nolint:lintername — never bare //nolint
Place the comment on the same line as the finding
Include a justification after //
CI/CD Integration
Run golangci lint run ./... in CI after tests. Pin the golangci lint version
used by CI so local and release behavior do not drift.
Pre commit Hook
Use new from rev to lint only changed code, keeping the feedback loop fast.
Quick Reference
Task Command/Action
Install golangci lint go install github.com/golangci/golangci lint/v2/cmd/golangci lint@v2.10.1
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
Linter Selection Guidelines
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
Related Skills
Style foundations : See [go style core](../go style core/SKILL.md) when resolving style questions that linters enforce (formatting, nesting, naming)
Code review : See [go code review](../go code review/SKILL.md) when combining linter output with a manual review checklist
Error handling : See [go error handling](../go error handling/SKILL.md) when errcheck flags unhandled errors and you need to decide how to handle them
Testing : See [go testing](../go testing/SKILL.md) when running linters alongside tests in CI pipelines