golangci-lint pour Go : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 :

Recommendations