0Pricing
Go Academy · Lektion

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

  1. Einen HTTP-Server erstellen
  2. Routing und Pfadparameter
  3. Middleware-Pattern
  4. Graceful Shutdown
← Zurück zu Go Academy