Oprettelse af en HTTP-server
ListenAndServe, HandlerFunc og ServeMux
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
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
- Oprettelse af en HTTP-server
- Routing og sti-parametre
- Middleware-mønsteret
- Graciøs nedlukning