đ 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 |
đ§ Diagnostischer Selbst-Check
ĂberprĂŒfe dein VerstĂ€ndnis der Kernkonzepte und typischen Go-Fallen, bevor du die Ăbung in der Web-IDE bearbeitest.
đŻ 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!