Warum Go die beste Wahl für Mikroservices ist (und wann nicht)
Stellen Sie sich vor, Sie bauen ein Einkaufszentrum. Anstatt ein riesiges Gebäude zu errichten, bauen Sie einzelne Pavillons: ein Café, eine Buchhandlung, einen Supermarkt. Jeder funktioniert für sich, aber zusammen bilden sie einen Komplex. Ist der Aufzug kaputt? Die Buchhandlung arbeitet weiter. Sind die Becher im Café leer? Wir schließen nur das Café, nicht den gesamten Komplex.
Das ist die Mikroservice-Architektur. Und Go (Golang) ist das ideale Material für den Bau solcher "Pavillons". Warum?
- Schneller Start: Kompilierung in eine einzige Binärdatei. Keine JDKs, virtuellen Maschinen oder node_modules.
- Leistung: Go arbeitet auf dem Niveau von C++, schreibt sich aber wie Python.
- Eingebaute Nebenläufigkeit: Goroutinen und Channels sind eine Superkraft für die Verarbeitung von Hunderten von Anfragen pro Sekunde.
- Einfachheit: Go ist bewusst eingeschränkt. Es gibt keine Generics (bis Go 1.18 gab es sie nicht), keine Vererbung. Der Code liest sich wie eine Bedienungsanleitung für einen Staubsauger – man versteht sofort, was jede Zeile macht.
Es gibt aber auch Nachteile. Go ist nicht geeignet, wenn Sie Folgendes benötigen:
- Schwere Klassenvererbung (die gibt es hier gar nicht).
- Eine riesige Anzahl fertiger Bibliotheken für jede Aufgabe (das Ökosystem ist ärmer als bei Java oder Python).
- Dynamische Typisierung (Go ist streng typisiert, man muss mehr Boilerplate-Code schreiben).
Wenn Ihr Projekt eine hochlastige API, ein Backend für einen Chat, ein Zahlungs-Gateway oder ein Überwachungssystem ist, ist Go Ihre Wahl. Wenn Sie an einem Wochenende einen Prototypen schreiben und Ihnen die Geschwindigkeit egal ist, nehmen Sie Python.
Phase 1: Den Koffer packen: Werkzeuge und Projektstruktur
Was Sie installieren müssen
Bevor wir Code schreiben, richten wir die Umgebung ein. Sie benötigen:
- Go (Version 1.21+). Herunterladen von
go.dev. - Docker (für die Containerisierung).
- curl oder Postman (zum Testen der API).
- Eine beliebige IDE: GoLand, VS Code mit Go-Plugin, Vim. Ich empfehle VS Code – kostenlos und praktisch.
Die richtige Ordnerstruktur
Legen wir gleich fest: keine Nachlässigkeit. Hier ist die Standardstruktur für einen Mikroservice in Go:
/user-service├── cmd/│ └── server/│ └── main.go # Einstiegspunkt├── internal/│ ├── handler/ # HTTP-Handler│ ├── service/ # Geschäftslogik│ ├── repository/ # Datenbankzugriff│ └── model/ # Datenstrukturen├── pkg/│ └── middleware/ # Allgemeine Hilfsprogramme├── Dockerfile├── go.mod└── go.sumWarum so? Go ist eine Sprache, in der die Ordnerstruktur die Architektur bestimmt. cmd/ ist der Einstiegspunkt. internal/ ist alles, was nicht von außen importiert werden kann (Narrenschutz). pkg/ ist das, was mit anderen Diensten geteilt werden kann.
Phase 2: Den ersten Mikroservice schreiben: Hallo, Welt! 2.0
Schreiben wir einen einfachen HTTP-Server in Go, der JSON zurückgibt. Das wird unser "Gruß-Mikroservice".
Schritt 1: Modul initialisieren
mkdir hello-servicecd hello-servicego mod init github.com/ihr-benutzername/hello-serviceSchritt 2: main.go schreiben
package main
import ( "encoding/json" "log" "net/http" "time")
// GreetingResponse — Antwortstrukturtype GreetingResponse struct { Message string `json:"message"` Timestamp string `json:"timestamp"`}
func greetHandler(w http.ResponseWriter, r *http.Request) { // Header setzen w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK)
// Antwort erstellen response := GreetingResponse{ Message: "Hallo, Mikroservices!",