Configure and run golangci-lint in Makefile and CI.
Formatters to be enabled:
Linters to be enabled:
asasalint # checks for pass []any as any in variadic func(...any)
asciicheck # checks that your code does not contain non-ASCII identifiers
bidichk # checks for dangerous unicode character sequences
bodyclose # checks whether HTTP response body is closed successfully
canonicalheader # checks whether net/http.Header uses canonical header
copyloopvar # detects places where loop variables are copied (Go 1.22+)
cyclop # checks function and package cyclomatic complexity
depguard # checks if package imports are in a list of acceptable packages
dupl # tool for code clone detection
durationcheck # checks for two durations multiplied together
embeddedstructfieldcheck # checks embedded types in structs
errcheck # checking for unchecked errors, these unchecked errors can be critical bugs in some cases
errname # checks that sentinel errors are prefixed with the Err and error types are suffixed with the Error
errorlint # finds code that will cause problems with the error wrapping scheme introduced in Go 1.13
exhaustive # checks exhaustiveness of enum switch statements
exptostd # detects functions from golang.org/x/exp/ that can be replaced by std functions
fatcontext # detects nested contexts in loops
forbidigo # forbids identifiers
funcorder # checks the order of functions, methods, and constructors
funlen # tool for detection of long functions
gocheckcompilerdirectives # validates go compiler directive comments (//go:)
gochecknoglobals # checks that no global variables exist
gochecknoinits # checks that no init functions are present in Go code
gochecksumtype # checks exhaustiveness on Go "sum types"
gocognit # computes and checks the cognitive complexity of functions
goconst # finds repeated strings that could be replaced by a constant
gocritic # provides diagnostics that check for bugs, performance and style issues
gocyclo # computes and checks the cyclomatic complexity of functions
godoclint # checks Golang's documentation practice
godot # checks if comments end in a period
gomoddirectives # manages the use of 'replace', 'retract', and 'excludes' directives in go.mod
goprintffuncname # checks that printf-like functions are named with f at the end
gosec # inspects source code for security problems
govet # reports suspicious constructs, such as Printf calls whose arguments do not align with the format string
iface # checks the incorrect use of interfaces, helping developers avoid interface pollution
ineffassign # detects when assignments to existing variables are not used
intrange # finds places where for loops could make use of an integer range
iotamixing # checks if iotas are being used in const blocks with other non-iota declarations
loggercheck # checks key value pairs for common logger libraries (kitlog,klog,logr,zap)
makezero # finds slice declarations with non-zero initial length
mirror # reports wrong mirror patterns of bytes/strings usage
mnd # detects magic numbers
musttag # enforces field tags in (un)marshaled structs
nakedret # finds naked returns in functions greater than a specified function length
nestif # reports deeply nested if statements
nilerr # finds the code that returns nil even if it checks that the error is not nil
nilnesserr # reports that it checks for err != nil, but it returns a different nil value error (powered by nilness and nilerr)
nilnil # checks that there is no simultaneous return of nil error and an invalid value
noctx # finds sending http request without context.Context
nolintlint # reports ill-formed or insufficient nolint directives
nonamedreturns # reports all named returns
nosprintfhostport # checks for misuse of Sprintf to construct a host with port in a URL
perfsprint # checks that fmt.Sprintf can be replaced with a faster alternative
predeclared # finds code that shadows one of Go's predeclared identifiers
promlinter # checks Prometheus metrics naming via promlint
protogetter # reports direct reads from proto message fields when getters should be used
reassign # checks that package variables are not reassigned
recvcheck # checks for receiver type consistency
revive # fast, configurable, extensible, flexible, and beautiful linter for Go, drop-in replacement of golint
rowserrcheck # checks whether Err of rows is checked successfully
sloglint # ensure consistent code style when using log/slog
spancheck # checks for mistakes with OpenTelemetry/Census spans
sqlclosecheck # checks that sql.Rows and sql.Stmt are closed
staticcheck # is a go vet on steroids, applying a ton of static analysis checks
testableexamples # checks if examples are testable (have an expected output)
testifylint # checks usage of github.com/stretchr/testify
testpackage # makes you use a separate _test package
tparallel # detects inappropriate usage of t.Parallel() method in your Go test codes
unconvert # removes unnecessary type conversions
unparam # reports unused function parameters
unqueryvet # detects SELECT * in SQL queries and SQL builders, encouraging explicit column selection
unused # checks for unused constants, variables, functions and types
usestdlibvars # detects the possibility to use variables/constants from the Go standard library
usetesting # reports uses of functions with replacement inside the testing package
wastedassign # finds wasted assignment statements
whitespace # detects leading and trailing whitespace
May want to enable:
Configure and run golangci-lint in Makefile and CI.
Formatters to be enabled:
Linters to be enabled:
May want to enable:
if err := ...; err != nil {