Einen HTTP-Server erstellen
ListenAndServe, HandlerFunc und ServeMux
Einen HTTP-Server erstellen ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Paket net/http
Die Go-Standardbibliothek net/http stellt ohne externe Abhängigkeiten einen produktionsreifen HTTP/1.1- und HTTP/2-Server bereit.
Einfacher Server
Registrieren Sie einen Handler mit http.HandleFunc und starten Sie das Lauschen mit http.ListenAndServe:
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))Schnittstelle http.Handler
Jeder Typ, der ServeHTTP(ResponseWriter, *Request) implementiert, ist ein http.Handler. Verwenden Sie ihn für zustandsbehaftete Handler, die eine Datenbank oder Konfiguration enthalten.
type App struct{ db *sql.DB }
func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// use a.db
}ServeMux
http.NewServeMux() erstellt einen isolierten Router. Übergeben Sie ihn an http.ListenAndServe, um den globalen Standard-Mux zu vermeiden. Das ist in Bibliotheken sicherer.
mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)Antworten mit Statuscodes
Schreiben Sie den Statuscode mit w.WriteHeader(code), bevor Sie den Body schreiben. Wenn Sie nur w.Write aufrufen, ist der Status standardmäßig 200.
w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))JSON-Antworten schreiben
Setzen Sie Content-Type, bevor Sie den Body schreiben, und codieren Sie ihn anschließend mit json.Encoder:
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)Anfrage lesen
Greifen Sie über die Struktur *Request auf Methode, URL, Header, Query-Parameter und Body zu.
r.Method // "GET", "POST", ...
r.URL.Path // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")JSON-Anfrage-Body parsen
Decodieren Sie den Anfrage-Body mit json.Decoder. Begrenzen Sie die Größe des Bodys mit http.MaxBytesReader, um eine Erschöpfung des Speichers zu verhindern.
r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)Serverkonfiguration
Konfigurieren Sie Zeitlimits mit einem benutzerdefinierten http.Server, um Angriffe durch langsame Clients zu verhindern:
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
srv.ListenAndServe()HTTPS
Verwenden Sie srv.ListenAndServeTLS(certFile, keyFile), um HTTPS bereitzustellen. Zertifikate können selbst signiert sein (Entwicklung) oder von Let's Encrypt stammen (Produktion über golang.org/x/crypto/acme/autocert).
Handler-Komposition
Umschließen Sie Handler, um übergreifende Belange wie Logging, Authentifizierung und Fehlerbehandlung hinzuzufügen, ohne die Geschäftslogik zu ändern. Geben Sie den nächsten Handler nach der Änderung zurück.
Kurzer Test
Warum sollten Sie ReadTimeout und WriteTimeout bei einem http.Server setzen?
Zusammenfassung: HTTP-Server erstellen
Wichtige Punkte:
- HandleFunc + ListenAndServe für einfache Server
- Benutzerdefinierter http.Server mit Zeitlimits für den Produktionseinsatz
- ServeMux für isoliertes Routing
- json.NewEncoder(w) für JSON-Antworten
Häufig gestellte Fragen
Ist die Lektion „Einen HTTP-Server erstellen“ kostenlos?
Ja — der vollständige Text von „Einen HTTP-Server erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Einen HTTP-Server erstellen“?
ListenAndServe, HandlerFunc und ServeMux Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Einen HTTP-Server erstellen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Einen HTTP-Server erstellen
- Routing und Pfadparameter
- Middleware-Pattern
- Graceful Shutdown