Automatisierung von Routineaufgaben mit Go: Wie man Skripte schreibt, die funktionieren und nicht kaputtgehen

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

Warum Go die ideale Sprache für Automatisierung ist?

\n\n

Haben Sie jemals ein Python-Skript geschrieben, das auf Ihrem Laptop einwandfrei funktionierte, aber auf dem Server aufgrund einer fehlenden Interpreter-Version abstürzte? Oder ist Ihr Bash-Skript zu einem unwartbaren Monster geworden, sobald die Logik etwas komplexer wurde als "Datei kopieren"?

\n\n

Wenn ja, dann sollten Sie sich Go genauer ansehen. Diese Sprache wurde in den Tiefen von Google genau dafür entwickelt, Probleme zu lösen, mit denen Ingenieure beim Schreiben von Dienstprogrammen und Diensten konfrontiert werden. Sie wird in eine einzige Binärdatei kompiliert (keine Abhängigkeiten!), arbeitet mit Lichtgeschwindigkeit und hat eine einfache, aber leistungsstarke Syntax.

\n\n

In diesem Artikel bringen wir Ihnen nicht die Grundlagen der Syntax bei. Wir kommen sofort zur Sache: Aufgabenautomatisierung mit Go mit echten Codebeispielen. Sie erfahren, wie Sie Ihre ersten "Go-Skripte" schreiben, die zuverlässiger und schneller arbeiten als ihre Python-Pendants. Los geht's!

\n\n

1. Arbeiten mit dem Dateisystem: Logs wie ein Profi bereinigen

\n\n

Eine der häufigsten Aufgaben eines Admins oder Entwicklers ist die Bereinigung alter Logs. Schreiben wir ein Dienstprogramm, das Dateien löscht, die älter als N Tage in einem bestimmten Verzeichnis sind. Dies ist ein klassisches Beispiel für Automatisierung mit Go.

\n\n
package main\n\nimport (\n    "fmt"\n    "os"\n    "path/filepath"\n    "time"\n)\n\nfunc main() {\n    // Pfad zum Log-Verzeichnis\n    logDir := "/var/log/myapp"\n    // Lösche Dateien, die älter als 7 Tage sind\n    maxAge := 7 * 24 * time.Hour\n\n    err := filepath.Walk(logDir, func(path string, info os.FileInfo, err error) error {\n        if err != nil {\n            return err\n        }\n\n        // Verzeichnisse überspringen\n        if info.IsDir() {\n            return nil\n        }\n\n        // Alter der Datei prüfen\n        if time.Since(info.ModTime()) > maxAge {\n            fmt.Printf("Lösche alte Datei: %s (Alter: %v)\\n", path, time.Since(info.ModTime()))\n            err := os.Remove(path)\n            if err != nil {\n                fmt.Printf("Fehler beim Löschen von %s: %v\\n", path, err)\n            }\n        }\n        return nil\n    })\n\n    if err != nil {\n        fmt.Printf("Fehler beim Durchlaufen des Verzeichnisses: %v\\n", err)\n    }\n}\n
\n\n

Dieser Code ist ein hervorragendes Beispiel dafür, wie man Aufgaben mit Go automatisieren kann, ohne überflüssige Bibliotheken. Das integrierte Paket filepath durchläuft Ordner rekursiv, und os.Remove räumt Speicherplatz frei. Einmal kompiliert, erhalten Sie eine Binärdatei, die Sie per cron auf jedem Server ausführen können.

\n\n

2. HTTP-Anfragen und API-Parsing

\n\n

Angenommen, Sie müssen den Status mehrerer Microservices überwachen oder Daten von einer externen API parsen. Go meistert dies mit seinen Goroutinen hervorragend. Schreiben wir ein Skript, das die Erreichbarkeit von Websites prüft und eine Benachrichtigung sendet, wenn etwas ausfällt. Dies ist ein weiteres leistungsstarkes Beispiel für Automatisierung mit Golang.

\n\n
package main\n\nimport (\n    "fmt"\n    "net/http"\n    "sync"\n    "time"\n)\n\nfunc checkURL(url string, wg *sync.WaitGroup) {\n    defer wg.Done()\n\n    client := http.Client{\n        Timeout: 5 * time.Second,\n    }\n\n    resp, err := client.Get(url)\n    if err != nil {\n        fmt.Printf("[FEHLER] %s - %v\\n", url, err)\n        return\n    }\n    defer resp.Body.Close()\n\n    if resp.StatusCode != http.StatusOK {\n        fmt.Printf("[WARN] %s - Status: %d\\n", url, resp.StatusCode)\n    } else {\n        fmt.Printf("[OK]   %s - funktioniert\\n", url)\n    }\n}\n\nfunc main() {\n    urls := []string{\n        "https://google.com",\n        "https://github.com",\n        "https://pythonlib.ru",\n        "https://non-existent-site.xyz",\n    }\n\n    var wg sync.WaitGroup\n\n    for _, url := range urls {\n        wg.Add(1)\n        go checkURL(url, &wg) // In einer Goroutine starten\n    }\n\n    wg.Wait() // Auf Abschluss aller Goroutinen warten\n    fmt.Println("Überprüfung abgeschlossen.")\n}\n
\n\n

Beachten Sie das s

Blogs

Buchempfehlungen