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

Was ist golangci-lint und warum braucht man es?

golangci-lint ist nicht einfach nur eine Bibliothek, sondern ein leistungsstarker Linter-Aggregator für die Programmiersprache Go. Es handelt sich um ein einheitliches Werkzeug, das mehrere gängige statische Code-Analyse-Tools (Linter) gleichzeitig ausführt und deren Ergebnisse in einem klaren Bericht zusammenfasst. Im Grunde ist es der „Linter der Linter".

Warum wird es benötigt? In der modernen Go-Entwicklung ist die Aufrechterhaltung der Codequalität eine kritische Aufgabe. Einzelne Linter wie vet, staticcheck, errcheck, gocyclo und Dutzende andere, jeder mit eigenen Flags und Einstellungen, können die Einrichtung von CI/CD zum Albtraum machen. golangci-lint löst dieses Problem, indem es Folgendes bietet:

  • Einheitlicher Einstiegspunkt: Ein einziger Befehl startet alle konfigurierten Linter.
  • Parallele Ausführung: Die Linter werden parallel ausgeführt, was den Analyseprozess erheblich beschleunigt.
  • Caching: Die Ergebnisse werden zwischengespeichert, wodurch wiederholte Ausführungen (z. B. bei Änderung nur einer Datei) nahezu augenblicklich erfolgen.
  • Flexible Konfiguration: Linter können einfach ein- oder ausgeschaltet und ihr Verhalten über eine YAML-Datei oder Kommandozeilenargumente angepasst werden.
  • Integration in IDE und CI/CD: Wird von den meisten modernen Entwicklungsumgebungen (VS Code, GoLand) und Continuous-Integration-Systemen (GitHub Actions, GitLab CI, Jenkins) unterstützt.

Die Verwendung von golangci-lint hilft Teams, potenzielle Fehler, stilistische Probleme, ungenutzten Code sowie Performance- und Sicherheitsprobleme frühzeitig im Entwicklungsprozess automatisch zu erkennen, was zu zuverlässigerem und wartbarerem Code führt.

Installation von golangci-lint

Im Gegensatz zu normalen Go-Bibliotheken wird golangci-lint als binäre ausführbare Datei installiert und nicht in den Code importiert. Es gibt mehrere Installationsmöglichkeiten:

1. Schnellinstallation (empfohlen für CI/CD)

Der einfachste und bevorzugte Weg ist die Verwendung des Installationsskripts:

curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1

Hinweis: Ersetzen Sie v1.59.1 durch die aktuelle Version von GitHub Releases.

2. Installation über go install

Wenn Sie Go Version 1.21 oder neuer installiert haben:

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

3. Installation über Paketmanager (macOS/Linux)

macOS (Homebrew):

brew install golangci-lint

Linux (Snap):

sudo snap install golangci-lint --classic

4. Installation überprüfen

Überprüfen Sie nach der Installation, ob alles funktioniert:

golangci-lint --version

Sie sollten eine Ausgabe sehen wie: golangci-lint has version 1.59.1 built from ...

Schnellstart mit einem Codebeispiel

Lassen Sie uns ein einfaches Go-Projekt erstellen und golangci-lint darauf ausführen.

Schritt 1: Projekt erstellen

mkdir my-lint-project
cd my-lint-project
go mod init my-lint-project

Schritt 2: "Schlechten" Code schreiben

Erstellen Sie eine Datei main.go:

package main

import (
    "fmt"
    "io/ioutil" // deprecated
    "log"
)

var unusedGlobalVar = 42 // ungenutzte Variable

func main() {
    x := 10 // ungenutzte Variable
    fmt.Println("Hello")
    readFile("test.txt")
}

func readFile(path string) {
    data, err := ioutil.ReadFile(path) // Fehler wird nicht behandelt
    if err != nil {
        log.Fatal(err)
    }
    _ = data
}

Schritt 3: Linter ausführen

Empfehlungen