Sobes.tech
Senior

Cos'è il middleware nei server HTTP di Go e come viene implementato?

sobes.tech AI

Risposta dell'AI

Il middleware nei server HTTP di Go è una funzione o un insieme di funzioni che avvolgono il gestore delle richieste (http.Handler) per aggiungere logica aggiuntiva, come logging, autenticazione, gestione degli errori, ecc.

Viene implementato come una funzione che accetta un http.Handler e ne restituisce uno. Esempio:

func loggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Printf("Request: %s %s", r.Method, r.URL.Path)
        next.ServeHTTP(w, r) // chiama il gestore successivo
    })
}

// Uso
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello"))
})

loggedMux := loggingMiddleware(mux)
http.ListenAndServe(":8080", loggedMux)

In questo modo, il middleware consente di elaborare le richieste in modo sequenziale, aggiungendo strati funzionali necessari senza modificare il gestore principale.