golangci-lint para Go: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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:

Recommendations