Opprette en HTTP-server
ListenAndServe, HandlerFunc og ServeMux
Opprette en HTTP-server er en gratis leksjon i Go Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Go Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Go Academy inneholder totalt 4 leksjoner.
net/http-pakken
Go's standardbibliotek net/http tilbyr en produksjonsklar HTTP/1.1- og HTTP/2-server uten eksterne avhengigheter.
Grunnleggende server
Registrer en handler med http.HandleFunc, og start lyttingen 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-grensesnittet
Alle typer som implementerer ServeHTTP(ResponseWriter, *Request), er en http.Handler. Bruk dette for stateful handlere som inneholder en database eller konfigurasjon.
type App struct{ db *sql.DB }
func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// use a.db
}ServeMux
http.NewServeMux() oppretter en isolert ruter. Send den til http.ListenAndServe for å unngå den globale standard-muxen, noe som er tryggere i biblioteker.
mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)Sende svar med statuskoder
Skriv statuskoden med w.WriteHeader(code) før du skriver body-en. Hvis du bare kaller w.Write, blir statusen 200 som standard.
w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))Skrive JSON-svar
Angi Content-Type før du skriver body-en, og kod deretter med json.Encoder:
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)Lese forespørselen
Du får tilgang til metode, URL, headere, spørringsparametere og body via *Request-strukturen.
r.Method // "GET", "POST", ...
r.URL.Path // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")Analysere JSON-bodyen i forespørselen
Dekod forespørselens body med json.Decoder. Begrens størrelsen på body-en med http.MaxBytesReader for å hindre at minnet tømmes.
r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)Serverkonfigurasjon
Konfigurer tidsavbrudd med en egendefinert http.Server for å hindre angrep fra trege klienter:
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
srv.ListenAndServe()HTTPS
Bruk srv.ListenAndServeTLS(certFile, keyFile) for å tilby HTTPS. Sertifikater kan være selvsignerte (utvikling) eller komme fra Let's Encrypt (produksjon via golang.org/x/crypto/acme/autocert).
Sammensetting av handlere
Pakk inn handlere for å legge til tverrgående funksjonalitet (logging, autentisering og gjenoppretting) uten å endre forretningslogikken. Returner den neste handleren etter endringen.
Hurtigsjekk
Hvorfor bør du angi ReadTimeout og WriteTimeout på en http.Server?
Oppsummering: Opprette en HTTP-server
Viktige punkter:
- HandleFunc + ListenAndServe for enkle servere
- Egendefinert http.Server med tidsavbrudd i produksjon
- ServeMux for isolert ruting
- json.NewEncoder(w) for JSON-svar
Lær deg Go med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «Opprette en HTTP-server» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Go Academy, inkludert «Opprette en HTTP-server», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Go Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Opprette en HTTP-server»?
ListenAndServe, HandlerFunc og ServeMux Du øver på Go Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Go Academy?
Ingen tidligere erfaring er nødvendig. Go Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Opprette en HTTP-server»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Go Academy-leksjonen?
Ja. Alle Go Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Opprette en HTTP-server
- Ruting og sti-parametere
- Middleware-mønsteret
- Kontrollert avslutning