Qu'est-ce que golangci-lint et pourquoi l'utiliser ?
golangci-lint n'est pas simplement une bibliothèque, mais un puissant agrégateur de linters pour le langage de programmation Go. Il s'agit d'un outil unique qui exécute simultanément de nombreux analyseurs statiques de code (linters) populaires, en combinant leurs résultats en un seul rapport clair. En substance, c'est un « linter de linters ».
Pourquoi en avez-vous besoin ? Dans le développement moderne en Go, maintenir la qualité du code est une tâche cruciale. Des linters disparates, comme vet, staticcheck, errcheck, gocyclo et des dizaines d'autres, chacun avec ses propres drapeaux et configurations, peuvent transformer la configuration de votre CI/CD en cauchemar. golangci-lint résout ce problème en offrant :
- Un point d'entrée unique : Une seule commande exécute tous les linters configurés.
- Exécution parallèle : Les linters sont lancés en parallèle, ce qui accélère considérablement le processus d'analyse.
- Mise en cache : Les résultats sont mis en cache, rendant les exécutions répétées (par exemple, après la modification d'un seul fichier) quasi instantanées.
- Configuration flexible : Activez/désactivez facilement les linters et configurez leur comportement via un fichier YAML ou des arguments en ligne de commande.
- Intégration avec les IDE et CI/CD : Pris en charge par la plupart des environnements de développement modernes (VS Code, GoLand) et des systèmes d'intégration continue (GitHub Actions, GitLab CI, Jenkins).
L'utilisation de golangci-lint aide les équipes à détecter automatiquement les erreurs potentielles, les problèmes de style, le code inutilisé, ainsi que les problèmes de performance et de sécurité dès les premières étapes du développement, ce qui conduit à un code plus fiable et plus facile à maintenir.
Installation de golangci-lint
Contrairement aux bibliothèques Go classiques, golangci-lint s'installe comme un fichier binaire exécutable, et non en l'important dans votre code. Il existe plusieurs méthodes d'installation :
1. Installation rapide (recommandée pour le CI/CD)
La méthode la plus simple et préférée consiste à utiliser le script d'installation :
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1
Remarque : Remplacez v1.59.1 par la version actuelle disponible sur GitHub Releases.
2. Installation via go install
Si vous avez installé Go version 1.21 ou plus récente :
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
3. Installation via les gestionnaires de paquets (macOS/Linux)
macOS (Homebrew) :
brew install golangci-lint
Linux (Snap) :
sudo snap install golangci-lint --classic
4. Vérification de l'installation
Après l'installation, vérifiez que tout fonctionne :
golangci-lint --version
Vous devriez voir quelque chose comme : golangci-lint has version 1.59.1 built from ...
Démarrage rapide avec un exemple de code
Créons un projet Go simple et exécutons golangci-lint dessus.
Étape 1 : Créez le projet
mkdir mon-projet-lint
cd mon-projet-lint
go mod init mon-projet-lint
Étape 2 : Écrivez du code "volontairement mauvais"
Créez un fichier main.go :
package main
import (
"fmt"
"io/ioutil" // déprécié
"log"
)
var variableGlobaleInutilisee = 42 // variable inutilisée
func main() {
x := 10 // variable inutilisée
fmt.Println("Bonjour")
lireFichier("test.txt")
}
func lireFichier(chemin string) {
donnees, err := ioutil.ReadFile(chemin) // l'erreur n'est pas gérée
if err != nil {
log.Fatal(err)
}
_ = donnees
}