Willkommen in der Welt von DevOps! ? Heute bin ich mit einem weiteren spannenden Blog zurück, der Ihnen dabei helfen soll, tiefer in die praktische Programmierung für DevOps-Aufgaben einzutauchen. In meinem vorherigen Blog haben wir drei Python-Projekte untersucht, die den Grundstein für die DevOps-Automatisierung legten.
Jetzt schalten wir den Gang um und entdecken die Kraft von Go-lang! Dieser Blog führt Sie durch die Erstellung von 3 Go-Lang-Projekten, die sowohl praktisch als auch anfängerfreundlich sind:
Also schnappen Sie sich Ihren bevorzugten Code-Editor und legen wir los! ?
Bevor wir mit dem Aufbau dieser Projekte beginnen, stellen wir sicher, dass Ihre Umgebung eingerichtet und einsatzbereit ist. Das brauchen Sie:
1. Geh (Golang)
Sie müssen Go auf Ihrem System installiert haben. Befolgen Sie je nach Betriebssystem die folgenden Schritte:
Windows
go version
Ubuntu
sudo apt update sudo apt install -y golang
go version
macOS
brew install go
go version
2. Grundlegendes Verständnis von Go
Obwohl Sie kein Experte sein müssen, hilft Ihnen ein grundlegendes Verständnis der Go-Konzepte wie Variablen, Funktionen und Strukturen dabei, reibungslos voranzukommen. Wenn Sie neu bei Go sind, empfehle ich Ihnen, die Go-Tour für einen schnellen Einstieg zu erkunden.
Wenn diese Voraussetzungen erfüllt sind, können Sie mit der Erstellung dieser fantastischen Go-Lang-Projekte beginnen! ?
Beginnen wir unsere Reise mit dem ersten Projekt – einem Tool zur Überwachung der Festplattennutzung. Dieses Programm hilft Ihnen bei der Analyse der Festplattennutzung für jedes angegebene Verzeichnis auf Ihrem System.
Den Quellcode finden Sie in meinem GitHub-Repository. Beginnen wir damit, eine Datei mit dem Namen disk_usage.go zu erstellen und den folgenden Code hinzuzufügen:
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
So funktioniert das Programm:
Ausführen des Programms
Um das Programm auszuführen, verwenden Sie die folgenden Befehle:
go version
sudo apt update sudo apt install -y golang
Da ich eine einzelne Partition habe, erhalte ich das gleiche Ergebnis, wenn ich verschiedene Pfade angebe.
Dieses Projekt zeigt, wie Go mit den zugrunde liegenden APIs Ihres Systems interagieren kann, was es zu einem hervorragenden Ausgangspunkt für Systemüberwachungsaufgaben macht. ?
Das zweite Projekt umfasst die Erstellung eines HTTP-Servers in Go, der eine Portfolio-Website hostet. Dieses Projekt zeigt, wie Sie statische Websites erstellen und bereitstellen und gleichzeitig einen Health-Check-Endpunkt zur Überwachung integrieren können.
Den Quellcode finden Sie in meinem GitHub-Repository.
Schritte zum Erstellen des HTTP-Servers
go version
Wie es funktioniert
Erstellen der Portfolio-Website
Struktur: Erstellen Sie im statischen Ordner Folgendes:
Fügen Sie den folgenden Inhalt zu Ihren Dateien hinzu:
index.html:
brew install go
Ausführen des Programms
go version
Zugriff auf den Gesundheitscheck
Um den Zustand des Servers zu überprüfen, besuchen Sie:
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
Dieses Projekt zeigt, wie man mit Go-lang einen funktionsfähigen Webserver zum Hosten statischer Inhalte erstellt, mit zusätzlicher Überwachung durch einen Endpunkt zur Gesundheitsprüfung. ?
Im letzten Projekt dieses Blogs erstellen wir eine RESTful-API, mit der Sie eine Liste von DevOps-Tools verwalten können. Dieses Programm demonstriert die Verwendung des Net/http-Pakets von Go zur Verarbeitung von RESTful-Routen und zur Datenverwaltung.
Der vollständige Quellcode ist in meinem GitHub-Repository verfügbar.
Erstellen der RESTful API
Schritt 1: Hauptprogramm
Erstellen Sie eine Datei mit dem Namen main.go und fügen Sie den folgenden Code hinzu:
go version
Schritt 2: Datenverarbeitung
Erstellen Sie im Tools-Verzeichnis eine Datei mit dem Namen data.go und fügen Sie Folgendes hinzu:
sudo apt update sudo apt install -y golang
Schritt 3: Handler
Erstellen Sie im Tools-Verzeichnis eine weitere Datei mit dem Namen handler.go und fügen Sie hinzu:
go version
Initialisierung des Moduls
Bevor Sie das Programm ausführen, initialisieren Sie das Go-Modul:
brew install go
Dadurch wird sichergestellt, dass das Projekt das Projekt-/Tools-Paket verwenden kann.
Ausführen des Programms
Starten Sie den Server, indem Sie Folgendes ausführen:
go version
Testen der API
package main import ( "fmt" "os" "syscall" ) func getDiskUsage(path string) { var stat syscall.Statfs_t err := syscall.Statfs(path, &stat) if err != nil { fmt.Println("Error Fetching Disk Usage:", err) return } total := stat.Blocks * uint64(stat.Bsize) free := stat.Bfree * uint64(stat.Bsize) used := total - free percentUsed := float64(used) / float64(total) * 100 fmt.Printf("Disk usage of %s:\n", path) fmt.Printf("Total: %d GB\n", total/1e9) fmt.Printf("Used: %d GB (%.2f%%)\n", used/1e9, percentUsed) fmt.Printf("Free: %d GB\n", free/1e9) } func main() { path := "/" if len(os.Args) > 1 { path = os.Args[1] } _, err := os.Stat(path) if os.IsNotExist(err) { fmt.Printf("Error: '%s' Path doesn't exist.\n", path) return } else if err != nil { fmt.Printf("Error occurred while accessing path %s: %v \n", path, err) return } getDiskUsage(path) }
Ausgabe:
go run disk_usage.go /path/to/directory
go run disk_usage.go
Ausgabe:
package main import ( "fmt" "net/http" ) func healthCheckHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("OK")) } func main() { fs := http.FileServer(http.Dir("./static")) http.Handle("/", fs) http.HandleFunc("/health", healthCheckHandler) port := "8090" fmt.Printf("Starting server on port %s....", port) err := http.ListenAndServe(":"+port, nil) if err != nil { fmt.Println("Error starting server:", err) } }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pravesh Sudha - Portfolio</title> <link rel="stylesheet" href="style.css"> </head> <body> <header> <div> <p><strong>style.css:</strong><br> </p> <pre class="brush:php;toolbar:false">body { font-family: Arial, sans-serif; margin: 0; padding: 0; line-height: 1.6; color: #333; background-color: #f9f9f9; } header { background: #4caf50; color: #fff; padding: 20px 0; text-align: center; } header .profile-picture { width: 150px; height: 150px; border-radius: 50%; margin-bottom: 15px; } header h1 { font-size: 2.5em; margin: 0; } header .subtitle { font-size: 1.2em; margin: 0; } main { padding: 20px; max-width: 800px; margin: 20px auto; background: #fff; border-radius: 8px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } main .about, main .links { margin-bottom: 20px; } main .links ul { list-style: none; padding: 0; } main .links li { margin: 10px 0; } main .links a { color: #4caf50; text-decoration: none; font-weight: bold; } main .links a:hover { text-decoration: underline; } footer { text-align: center; padding: 10px 0; background: #333; color: #fff; }
Ausgabe:
go run http_server.go
In diesem Blog haben wir drei praktische Go-Projekte untersucht, die Ihnen helfen, praktische Erfahrungen mit verschiedenen Aspekten der Softwareentwicklung zu sammeln. Von der Überwachung der Festplattennutzung über den Aufbau eines einfachen HTTP-Servers bis hin zum Hosten einer Portfolio-Website und schließlich der Erstellung einer RESTful-API zur Verwaltung von DevOps-Tools bieten diese Projekte eine solide Grundlage für alle, die ihre Go-Programmierkenntnisse verbessern möchten.
Jedes dieser Projekte ist ein Baustein, der erweitert werden kann, um ihn an reale Anwendungen anzupassen. Egal, ob Sie sich für die Überwachung von Systemen, die Entwicklung von Webanwendungen oder die Erstellung von APIs interessieren, Go bietet die Einfachheit und Leistung, die für eine effiziente Entwicklung erforderlich sind.
? Für einen informativeren Blog folgen Sie mir auf Hashnode, X(Twitter) und LinkedIn.
Bis dahin viel Spaß beim Programmieren!!
Viel Spaß beim Lernen! ?
Das obige ist der detaillierte Inhalt vonSpannende Go-Lang-Projekte für den Kickstart Ihrer DevOps-Reise. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!