golangci-lint für Go: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

golangci-lint: Der Linter-Aggregator für Go

1. Was ist das und warum braucht man es?

golangci-lint ist ein leistungsstarker Linter-Aggregator für die Programmiersprache Go. Er vereint Dutzende beliebter Tools zur statischen Code-Analyse in einer einzigen, schnellen und konfigurierbaren Oberfläche. Anstatt jeden Linter einzeln zu installieren und auszuführen (z. B. vet, staticcheck, errcheck, gocyclo und viele andere), führt der Entwickler nur einen Befehl aus, der alle Linter parallel startet, Ergebnisse zwischenspeichert und einen einheitlichen Bericht ausgibt. Das spart Stunden bei der Einrichtung von CI/CD-Pipelines und der lokalen Entwicklung.

Warum ist das notwendig? In großen Go-Projekten (Mikroservices, CLI-Tools, Webserver) ist die manuelle Sicherstellung der Codequalität unmöglich. Fehler wie unbehandelte Fehler, ungenutzte Variablen, falsche Formatierung oder potenzielle Deadlocks können zu Bugs in der Produktion führen. golangci-lint findet solche Probleme automatisch, bereits beim Code-Review oder im Pre-Commit-Hook. Es hilft auch, einen einheitlichen Codestil im Team durchzusetzen, was für Lesbarkeit und Wartbarkeit entscheidend ist.

Die wichtigsten Vorteile gegenüber dem separaten Ausführen von Lintern: Geschwindigkeit (Linter laufen parallel, Ergebnisse werden gecached), Flexibilität (jeder Linter kann ein- oder ausgeschaltet und über eine YAML-Konfiguration angepasst werden), Integration (funktioniert mit IDEs, CI/CD-Systemen und unterstützt go vet out-of-the-box) und einheitliches Ausgabeformat (JSON, SARIF, farbiger Text – für jedes Tool).

2. Installation

Die Installation von golangci-lint erfolgt auf verschiedene Weise. Die empfohlene Methode ist go install (erfordert Go 1.18+):

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

Nach der Installation befindet sich die Binärdatei in $GOPATH/bin (normalerweise ~/go/bin). Überprüfen Sie die Installation:

golangci-lint --version

Alternative Installationsmethoden (für CI/CD oder falls Go nicht installiert ist):

  • 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. Schnellstart – Minimales Arbeitsbeispiel

Erstellen Sie ein einfaches Go-Modul und eine Datei mit einem absichtlichen Fehler:

mkdir myproject && cd myproject
go mod init myproject

Erstellen Sie die Datei main.go:

package main

import "fmt"

func main() {
    x := 10
    fmt.Println("Hallo")
    // Fehler: ungenutzte Variable x
}

Führen Sie den Linter aus:

golangci-lint run

Die Ausgabe sieht ungefähr so aus:

main.go:6:2: `x` is unused (deadcode)
    x := 10
    ^

Der Linter hat eine ungenutzte Variable gefunden. Korrigieren Sie den Code (entfernen Sie die Zeile x := 10) und führen Sie ihn erneut aus – es werden keine Fehler mehr angezeigt.

Für eine strengere Prüfung verwenden Sie die Flags -v (verbose) und --fast (nur schnelle Linter):

golangci-lint run -v --fast

4. Wichtige Methoden/Funktionen/Befehle

Im Gegensatz zu einer Bibliothek ist golangci-lint ein CLI-Tool. Seine "Methoden" sind Befehle und Flags. Hier sind 8 wichtige Befehle und Optionen.

4.1. run – Der Hauptbefehl zum Ausführen der Linter

Syntax: golangci-lint run [Flags] [Pfad]

Funktion:

Empfehlungen