golangci-lint para Go: guia completo com exemplos

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

O que é golangci-lint e para que serve?

\n\n

golangci-lint não é apenas uma biblioteca, mas um poderoso agregador de linters para a linguagem de programação Go. Ele é uma ferramenta única que executa vários analisadores de código estático populares (linters) simultaneamente, combinando seus resultados em um único relatório claro. Em essência, é um "linter de linters".

\n\n

Para que serve? No desenvolvimento moderno em Go, manter a qualidade do código é uma tarefa crítica. Linters dispersos, como vet, staticcheck, errcheck, gocyclo e dezenas de outros, cada um com suas próprias flags e configurações, podem transformar a configuração de CI/CD em um pesadelo. O golangci-lint resolve esse problema fornecendo:

\n
    \n
  • Ponto de entrada único: Um único comando executa todos os linters configurados.
  • \n
  • Execução paralela: Os linters são executados em paralelo, acelerando significativamente o processo de análise.
  • \n
  • Cache: Os resultados são armazenados em cache, tornando as execuções repetidas (por exemplo, ao alterar apenas um arquivo) praticamente instantâneas.
  • \n
  • Configuração flexível: É fácil ativar/desativar linters e configurar seu comportamento através de um arquivo YAML ou argumentos de linha de comando.
  • \n
  • Integração com IDE e CI/CD: Suportado pela maioria dos ambientes de desenvolvimento modernos (VS Code, GoLand) e sistemas de integração contínua (GitHub Actions, GitLab CI, Jenkins).
  • \n
\n

O uso do golangci-lint ajuda as equipes a identificar automaticamente possíveis erros, problemas de estilo, código não utilizado, problemas de desempenho e segurança nas fases iniciais do desenvolvimento, levando a um código mais confiável e de fácil manutenção.

\n\n

Instalação do golangci-lint

\n\n

Ao contrário das bibliotecas Go comuns, o golangci-lint é instalado como um arquivo executável binário, e não importado no código. Existem várias formas de instalação:

\n\n

1. Instalação rápida (recomendada para CI/CD)

\n

A maneira mais simples e preferida é usar o script de instalação:

\n
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1
\n

Nota: Substitua v1.59.1 pela versão atual do GitHub Releases.

\n\n

2. Instalação via go install

\n

Se você tiver Go versão 1.21 ou superior instalado:

\n
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
\n\n

3. Instalação via gerenciadores de pacotes (macOS/Linux)

\n

macOS (Homebrew):

\n
brew install golangci-lint
\n

Linux (Snap):

\n
sudo snap install golangci-lint --classic
\n\n

4. Verificação da instalação

\n

Após a instalação, verifique se tudo está funcionando:

\n
golangci-lint --version
\n

Você deve ver algo como: golangci-lint has version 1.59.1 built from ...

\n\n

Início rápido com exemplo de código

\n\n

Vamos criar um projeto Go simples e executar o golangci-lint nele.

\n\n

Passo 1: Crie o projeto

\n
mkdir my-lint-project\ncd my-lint-project\ngo mod init my-lint-project
\n\n

Passo 2: Escreva código "ruim"

\n

Crie o arquivo main.go:

\n
package main\n\nimport (\n    "fmt"\n    "io/ioutil" // deprecated\n    "log"\n)\n\nvar unusedGlobalVar = 42 // variável não utilizada\n\nfunc main() {\n    x := 10 // variável não utilizada\n    fmt.Println("Hello")\n    readFile("test.txt")\n}\n\nfunc readFile(path string) {\n    data, err := ioutil.ReadFile(path) // erro não tratado\n    if err != nil {\n        log.Fatal                    

Recommendations