Creare un server HTTP
ListenAndServe, HandlerFunc e ServeMux
Creare un server HTTP è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Pacchetto net/http
La libreria standard di Go net/http fornisce un server HTTP/1.1 e HTTP/2 adatto alla produzione, senza dipendenze esterne.
Server di base
Registri un gestore con http.HandleFunc e inizi ad ascoltare con http.ListenAndServe:
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))Interfaccia http.Handler
Qualsiasi tipo che implementa ServeHTTP(ResponseWriter, *Request) è un http.Handler. Lo utilizzi per i gestori con stato che incorporano un database o una configurazione.
type App struct{ db *sql.DB }
func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// use a.db
}ServeMux
http.NewServeMux() crea un router isolato. Lo passi a http.ListenAndServe per evitare il mux globale predefinito, più sicuro nelle librerie.
mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)Rispondere con codici di stato
Scriva il codice di stato con w.WriteHeader(code) prima di scrivere il corpo. Se chiama solo w.Write, il codice predefinito è 200.
w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))Scrivere risposte JSON
Imposti Content-Type prima di scrivere il corpo, quindi codifichi con json.Encoder:
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)Leggere la richiesta
Acceda a metodo, URL, intestazioni, parametri di query e corpo tramite la struct *Request.
r.Method // "GET", "POST", ...
r.URL.Path // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")Analizzare il corpo della richiesta JSON
Decodifichi il corpo della richiesta con json.Decoder. Limiti la dimensione del corpo con http.MaxBytesReader per prevenire l'esaurimento della memoria.
r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)Configurazione del server
Configuri i timeout con un http.Server personalizzato per prevenire gli attacchi da client lenti:
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
srv.ListenAndServe()HTTPS
Utilizzi srv.ListenAndServeTLS(certFile, keyFile) per fornire HTTPS. I certificati possono essere autofirmati (sviluppo) oppure ottenuti da Let's Encrypt (produzione tramite golang.org/x/crypto/acme/autocert).
Composizione dei gestori
Avvolga i gestori per aggiungere funzionalità trasversali (logging, autenticazione, recovery) senza modificare la logica di business. Restituisca il gestore successivo dopo averlo modificato.
Verifica rapida
Perché dovrebbe impostare ReadTimeout e WriteTimeout su un http.Server?
Riepilogo: creare un server HTTP
Punti chiave:
- HandleFunc + ListenAndServe per i server semplici
- http.Server personalizzato con timeout per la produzione
- ServeMux per il routing isolato
- json.NewEncoder(w) per le risposte JSON
Domande Frequenti
La lezione «Creare un server HTTP» è gratuita?
Sì — il testo completo di «Creare un server HTTP» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Creare un server HTTP»?
ListenAndServe, HandlerFunc e ServeMux Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Creare un server HTTP»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Creare un server HTTP
- Routing e parametri del percorso
- Modello middleware
- Arresto graduale