🌐 1. Der Go HTTP-Server: Standardbibliothek pur
Im Gegensatz zu vielen anderen Sprachen benötigt Go für performante Web-APIs keine externen Frameworks. Jeder eingehende Request wird von der Go-Runtime automatisch in einer eigenen, leichtgewichtigen Goroutine verarbeitet!
│
[ServeMux Router]
├── /health ──> go HealthHandler()
└── /echo ──> go EchoHandler()
package main
import (
"fmt"
"net/http"
)
// Handler-Funktion: Signatur muss immer (http.ResponseWriter, *http.Request) sein!
func HelloHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
http.Error(w, "Methode nicht erlaubt", http.StatusMethodNotAllowed)
return
}
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, "Hallo aus dem Go Webserver!")
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/hello", HelloHandler)
fmt.Println("Server läuft auf http://localhost:8080")
http.ListenAndServe(":8080", mux)
}
🔍 2. Query-Parameter & URL-Pfade auslesen
Über das *http.Request-Objekt greifst du auf Query-Strings (?search=golang&page=2), HTTP-Header und URL-Pfade zu:
func SearchHandler(w http.ResponseWriter, r *http.Request) {
// 1. Query-Parameter parsen (?query=...):
searchQuery := r.URL.Query().Get("query")
if searchQuery == "" {
http.Error(w, "Parameter 'query' fehlt", http.StatusBadRequest)
return
}
// 2. Pfad-Präfixe analysieren:
path := r.URL.Path // z.B. "/search"
fmt.Fprintf(w, "Suchergebnis für: %s (Pfad: %s)", searchQuery, path)
}
Stell dir net/http wie eine moderne Poststelle vor:
Der *http.Request ist der Briefumschlag mit Absender, Zieladresse (URL) und Stempeln (Headern). Der http.ResponseWriter ist das leere Antwortformular, in das du den Statuscode stempelst (WriteHeader) und den Antwortbrief schreibst. Der ServeMux ist die Sortieranlage, die den Brief an die zuständige Fachabteilung (Handler) weiterleitet.
📑 3. Cheat-Sheet: Wichtige HTTP-Statuscodes & Methoden
| Go Konstante | Code | Bedeutung |
|---|---|---|
http.StatusOK |
200 |
Anfrage erfolgreich verarbeitet |
http.StatusCreated |
201 |
Neue Ressource erfolgreich erstellt |
http.StatusBadRequest |
400 |
Ungültige Eingabeparameter oder fehlerhaftes Format |
http.StatusNotFound |
404 |
Ressource existiert nicht |
http.StatusMethodNotAllowed |
405 |
HTTP-Methode (z.B. POST statt GET) für Endpoint nicht erlaubt |
🎯 Aufgaben & Checkliste in aufgabe.go
Mit dem Paket net/http/httptest kannst du HTTP-Handler isoliert im Speicher ohne offenen Netzwerkport testen: rec := httptest.NewRecorder() simuliert den ResponseWriter!