Go Academy · Lektion

Oprettelse af en HTTP-server

ListenAndServe, HandlerFunc og ServeMux

Lektion 1 af 413 trin

Oprettelse af en HTTP-server er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.

net/http-pakken

Gos standardbibliotek net/http indeholder en HTTP/1.1- og HTTP/2-server, der er egnet til produktion, uden eksterne afhængigheder.

Grundlæggende server

Registrér en handler med http.HandleFunc, og begynd at lytte med http.ListenAndServe:

http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))

http.Handler-grænsefladen

Enhver type, der implementerer ServeHTTP(ResponseWriter, *Request), er en http.Handler. Brug den til tilstandsfulde handlere, der indeholder en database eller konfiguration.

type App struct{ db *sql.DB }

func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    // use a.db
}

ServeMux

http.NewServeMux() opretter en isoleret router. Giv den videre til http.ListenAndServe for at undgå den globale standard-mux, hvilket er sikrere i biblioteker.

mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)

Svar med statuskoder

Skriv statuskoden med w.WriteHeader(code), før du skriver svarlegemet. Hvis du kun kalder w.Write, er standardstatus 200.

w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))

Skriv JSON-svar

Angiv Content-Type, før du skriver svarlegemet, og kod derefter med json.Encoder:

w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)

Læsning af forespørgslen

Få adgang til metode, URL, headere, forespørgselsparametre og indhold via *Request-strukturen.

r.Method          // "GET", "POST", ...
r.URL.Path        // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")

Parsing af JSON-indhold i forespørgslen

Afkod forespørgslens indhold med json.Decoder. Begræns indholdets størrelse med http.MaxBytesReader for at forhindre udtømning af hukommelsen.

r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)

Serverkonfiguration

Konfigurér tidsgrænser med en brugerdefineret http.Server for at forhindre angreb fra langsomme klienter:

srv := &http.Server{
    Addr:         ":8080",
    Handler:      mux,
    ReadTimeout:  5 * time.Second,
    WriteTimeout: 10 * time.Second,
    IdleTimeout:  120 * time.Second,
}
srv.ListenAndServe()

HTTPS

Brug srv.ListenAndServeTLS(certFile, keyFile) til at levere HTTPS. Certifikater kan være selvsignerede (udvikling) eller komme fra Let's Encrypt (produktion via golang.org/x/crypto/acme/autocert).

Sammensætning af handlere

Pak handlere ind for at tilføje tværgående funktionalitet (logning, godkendelse, fejlhåndtering) uden at ændre forretningslogikken. Returnér den næste handler efter ændringen.

Hurtigt tjek

Hvorfor bør du angive ReadTimeout og WriteTimeout på en http.Server?

Opsamling: Oprettelse af en HTTP-server

Vigtige punkter:

  • HandleFunc + ListenAndServe til simple servere
  • Brugerdefineret http.Server med tidsgrænser til produktion
  • ServeMux til isoleret routing
  • json.NewEncoder(w) til JSON-svar
Gratis at komme i gang

Lær Go med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Oprettelse af en HTTP-server” gratis?

Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Oprettelse af en HTTP-server”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Oprettelse af en HTTP-server”?

ListenAndServe, HandlerFunc og ServeMux Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Go Academy?

Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Oprettelse af en HTTP-server”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Go Academy-lektion?

Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Oprettelse af en HTTP-server
  2. Routing og sti-parametre
  3. Middleware-mønsteret
  4. Graciøs nedlukning
← Tilbage til Go Academy