0Pricing
Go Academy · Lezione

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

  1. Creare un server HTTP
  2. Routing e parametri del percorso
  3. Modello middleware
  4. Arresto graduale
← Torna a Go Academy