O que é golangci-lint e para que serve?
\n\ngolangci-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\nPara 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
- 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
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\nInstalação do golangci-lint
\n\nAo 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\n1. Instalação rápida (recomendada para CI/CD)
\nA maneira mais simples e preferida é usar o script de instalação:
\ncurl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1\nNota: Substitua v1.59.1 pela versão atual do GitHub Releases.
2. Instalação via go install
\nSe você tiver Go versão 1.21 ou superior instalado:
\ngo install github.com/golangci/golangci-lint/cmd/golangci-lint@latest\n\n3. Instalação via gerenciadores de pacotes (macOS/Linux)
\nmacOS (Homebrew):
\nbrew install golangci-lint\nLinux (Snap):
\nsudo snap install golangci-lint --classic\n\n4. Verificação da instalação
\nApós a instalação, verifique se tudo está funcionando:
\ngolangci-lint --version\nVocê deve ver algo como: golangci-lint has version 1.59.1 built from ...
Início rápido com exemplo de código
\n\nVamos criar um projeto Go simples e executar o golangci-lint nele.
\n\nPasso 1: Crie o projeto
\nmkdir my-lint-project\ncd my-lint-project\ngo mod init my-lint-project\n\nPasso 2: Escreva código "ruim"
\nCrie o arquivo main.go:
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 Também na biblioteca
chi para Go: guia completo com exemplos
Trabalho com XML em C# (.NET): guia completo para análise e criação