golangci-lint : Agrégateur de linters pour Go
1. Qu'est-ce que c'est et pourquoi l'utiliser
golangci-lint est un agrégateur de linters puissant pour le langage Go. Il regroupe des dizaines d'outils d'analyse statique de code populaires en une interface unique, rapide et configurable. Au lieu d'installer et d'exécuter chaque linter séparément (par exemple, vet, staticcheck, errcheck, gocyclo et des dizaines d'autres), le développeur dispose d'une seule commande qui les lance tous en parallèle, met en cache les résultats et fournit un rapport unifié. Cela permet d'économiser des heures de configuration pour l'intégration continue (CI/CD) et le développement local.
Pourquoi est-ce nécessaire ? Dans les grands projets Go (microservices, utilitaires CLI, serveurs web), maintenir la qualité du code manuellement est impossible. Des erreurs comme les erreurs non traitées, les variables inutilisées, un mauvais formatage ou des deadlocks potentiels peuvent entraîner des bugs en production. golangci-lint détecte automatiquement ces problèmes lors de la revue de code ou en pré-commit. Il aide également à maintenir un style de code cohérent au sein de l'équipe, ce qui est crucial pour la lisibilité et la maintenance.
Les avantages clés par rapport à l'exécution individuelle des linters : vitesse (les linters s'exécutent en parallèle, les résultats sont mis en cache), flexibilité (activation/désactivation de n'importe quel linter, configuration via un fichier YAML), intégration (compatible avec les IDE, les systèmes CI/CD, support natif de go vet) et format de sortie unifié (JSON, SARIF, texte coloré — pour n'importe quel outil).
2. Installation
L'installation de golangci-lint peut se faire de plusieurs manières. La méthode recommandée est via go install (nécessite Go 1.18+) :
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
Après l'installation, le binaire sera disponible dans $GOPATH/bin (généralement ~/go/bin). Vérifiez l'installation :
golangci-lint --version
Méthodes alternatives (pour CI/CD ou si Go n'est pas installé) :
- 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. Démarrage rapide — exemple minimal fonctionnel
Créez un module Go simple et un fichier avec une erreur intentionnelle :
mkdir monprojet && cd monprojet
go mod init monprojet
Créez le fichier main.go :
package main
import "fmt"
func main() {
x := 10
fmt.Println("Bonjour")
// Erreur : variable x inutilisée
}
Lancez le linter :
golangci-lint run
La sortie ressemblera à ceci :
main.go:6:2: `x` is unused (deadcode)
x := 10
^
Le linter a détecté une variable inutilisée. Corrigez le code (supprimez la ligne x := 10) et relancez la commande — il n'y aura plus d'erreurs.
Pour une vérification plus stricte, utilisez les flags -v (verbose) et --fast (linters rapides uniquement) :
golangci-lint run -v --fast
4. Méthodes/fonctions/commandes principales
Contrairement à une bibliothèque, golangci-lint est un outil en ligne de commande (CLI). Ses "méthodes" sont des commandes et des flags. Voici 8 commandes et options clés.
4.1. run — exécution principale des linters
Signature : golangci-lint run [flags] [chemin]
Fonction :