Warum Go die ideale Sprache für Automatisierung ist?
\n\nHaben 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\nWenn 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\nIn 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\n1. Arbeiten mit dem Dateisystem: Logs wie ein Profi bereinigen
\n\nEine 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\npackage 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\nDieser 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.
2. HTTP-Anfragen und API-Parsing
\n\nAngenommen, 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\npackage 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\nBeachten Sie das s