golangci-lint: Agregador de Linters para Go
1. O que é e por que usar
golangci-lint é um poderoso agregador de linters para a linguagem Go, que reúne dezenas de ferramentas populares de análise estática de código em uma única interface rápida e configurável. Em vez de instalar e executar cada linter separadamente (como vet, staticcheck, errcheck, gocyclo e muitos outros), o desenvolvedor obtém um único comando que executa todos eles em paralelo, armazena resultados em cache e gera um relatório unificado. Isso economiza horas de configuração de CI/CD e desenvolvimento local.
Por que isso é importante? Em projetos Go grandes (microsserviços, utilitários CLI, servidores web), manter a qualidade do código manualmente é impossível. Erros como não tratar erros, variáveis não utilizadas, formatação incorreta ou potenciais deadlocks podem causar bugs em produção. O golangci-lint encontra automaticamente esses problemas durante a revisão de código ou no pre-commit. Ele também ajuda a manter um estilo de código consistente na equipe, essencial para legibilidade e manutenção.
Principais vantagens em relação a executar linters individualmente: velocidade (linters rodam em paralelo, resultados são cacheados), flexibilidade (é possível ativar/desativar qualquer linter e configurar regras via YAML), integração (funciona com IDEs, sistemas de CI/CD e suporta go vet nativamente) e formato de saída unificado (JSON, SARIF, texto colorido — para qualquer ferramenta).
2. Instalação
A instalação do golangci-lint pode ser feita de várias maneiras. A forma recomendada é via go install (requer Go 1.18+):
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
Após a instalação, o binário estará disponível em $GOPATH/bin (geralmente ~/go/bin). Verifique a instalação:
golangci-lint --version
Métodos alternativos (para CI/CD ou se você não tiver Go instalado):
- Linux/macOS (curl):
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.55.2 - macOS (Homebrew):
brew install golangci-lint - Docker:
docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.55.2 golangci-lint run -v
3. Início rápido — exemplo mínimo funcional
Crie um módulo Go simples e um arquivo com um erro proposital:
mkdir meuprojeto && cd meuprojeto
go mod init meuprojeto
Crie o arquivo main.go:
package main
import "fmt"
func main() {
x := 10
fmt.Println("Olá")
// Erro: variável x não utilizada
}
Execute o linter:
golangci-lint run
A saída será algo como:
main.go:6:2: `x` is unused (deadcode)
x := 10
^
O linter encontrou uma variável não utilizada. Corrija o código (remova a linha x := 10) e execute novamente — não haverá erros.
Para uma verificação mais rigorosa, use a flag -v (verbose) e --fast (apenas linters rápidos):
golangci-lint run -v --fast
4. Principais comandos e opções
Ao contrário de uma biblioteca, o golangci-lint é uma ferramenta de linha de comando. Seus "métodos" são comandos e flags. Veja 8 comandos e opções essenciais.
4.1. run — execução principal dos linters
Assinatura: golangci-lint run [flags] [caminho]
O que faz:
Também na biblioteca
Migrações de banco de dados em Swift: ferramentas e abordagens para iOS/macOS
Trabalhando com Excel em Kotlin: bibliotecas Apache POI e Apache POI para Kotlin
Trabalho com XML em Kotlin: bibliotecas, parsing e criação de documentos
Cache em C++: Redis, nível de dados e outras ferramentas
gRPC para C++: bibliotecas, configuração e exemplos de código