Il routing Web è una tecnica per assegnare richieste HTTP alle funzioni del gestore che operano sul percorso URL specificato. Il routing viene spesso utilizzato per creare applicazioni a pagina singola (SPA) e API. Nel router, il codice definisce la sequenza di azioni che accompagnano la richiesta di un utente.

La libreria standard Go ha la maggior parte delle funzionalità necessarie per creare applicazioni Web, incluso il routing. Puoi usare il Serve Mux digita il rete/http pacchetto per la gestione del percorso di base. Se hai bisogno di una gestione del percorso più complessa, ci sono molti pacchetti di routing tra cui scegliere.

Iniziare con il routing in Go

L'ecosistema di Go ospita pacchetti di routing che astraggono l'inutile e semplificano la creazione di applicazioni e servizi Web.

Molti framework web Go implementano alcuni di questi pacchetti di routing.

Ecco un semplice modello di struttura per il JSON risposta tornerai al cliente in questo tutorial.

genere Informazioni struttura {
Messaggio corda`json:"messaggio"`
Descrizione corda`json:"descrizione"`
}
instagram viewer

La maggior parte dei router Go utilizza ancora net/http Scrittore di risposte e Richiesta metodi come parametri nelle funzioni del gestore.

funzciao(scrittore http. ResponseWriter, richiesta *http. Richiesta) {
// logica di business della funzione del gestore qui
}

Inoltre, dovrai avviare un server con Ascolta e servi metodo per avviare il server nella maggior parte dei pacchetti.

err := http. ListenAndServe(":8000", router)

Se ehm!= zero {
Restituzione
}

Ecco alcuni dei popolari pacchetti di routing nell'ecosistema Go.

1. Il router Gorilla Mux

Il pacchetto Gorilla Mux implementa sia un router di richiesta che un dispatcher di richieste per le richieste HTTP. È come il http. Serve Mux metodo ma con funzionalità aggiuntive.

Il router Gorilla Mux implementa il http. Gestore interfaccia e i suoi metodi sono compatibili con il Serve Mux metodo. Il pacchetto implementa anche più schemi URL ed è possibile utilizzare i router come router secondari (percorsi nidificati) per definire percorsi simili.

Il Gorilla Mux il pacchetto fa parte del toolkit web Gorilla. Il toolkit include pacchetti relativi al Web per risolvere molti problemi mantenendo gli utenti connessi con Sessions alla memorizzazione dei dati tramite Cookie.

Esegui questo comando nel terminale del tuo spazio di lavoro per installare il pacchetto Gorilla Mux.

andare get -u github.com/gorilla/mux

Ecco come puoi impostare a OTTENERE route di richiesta a una funzione del gestore che codifica in una risposta JSON con il pacchetto Gorilla Mux.

importare (
"codifica/json"
"github.com/gorilla/mux"
"tronco d'albero"
"rete/http"
)

funzciao(scrittore http. ResponseWriter, richiesta *http. Richiesta) {
risposta := Info {
Messaggio: "Successo",
Descrizione: "Hai scritto con successo al cliente",
}

err := json. NewEncoder (scrittore).Encode (risposta)

Se ehm!= zero {
tronco d'albero. Fatalln (err)
}
}

funzprincipale() {
router := mux. NuovoRouter()
router. HandleFunc("/ciao", ciao).Metodi("GET")
err := http. ListenAndServe(":8000", router)

Se ehm!= zero {
Restituzione
}
}

Il ciao la funzione handler codifica la struttura in JSON utilizzando il file Codificare metodo del Nuovo codificatore struttura

Il principale La funzione assegna una nuova istanza del router Gorilla Mux al file router variabile. Quindi chiama il HandleFunc metodo per mappare il percorso alla funzione del gestore. Puoi usare il Metodi metodo per specificare un tipo di richiesta.

2. Il router Chi

Il Chi Router è un router leggero, veloce e componibile per la creazione di servizi Web basati su HTTP in Go. Il router Chi è compatibile con il http pacchetto e non ci sono dipendenze esterne per il router.

A differenza di molti router, Chi fornisce il controllo del contesto con il contesto pacchetto per la gestione tempestiva delle richieste.

Installa il router Chi sui moduli Go con questo comando.

andare ottenere github.com/andare-chi/chi

Il routing con il router Gorilla Mux e il router Chi è molto simile. Ecco come puoi impostarne uno simile OTTENERE richiesta che codifica struct in JSON come risposta.

importare (
"codifica/json"
"github.com/andare-chi/chi/v5"
"tronco d'albero"
"rete/http"
)

funzprincipale() {
router := chi. NuovoRouter()
router. Get("/ciao", ciao)
err := http. ListenAndServe(":8000", router)

Se ehm!= zero {
Restituzione
}
}

funzciao(scrittore http. ResponseWriter, richiesta *http. Richiesta) {
risposta := Info {
Messaggio: "Successo",
Descrizione: "Hai scritto con successo al cliente",
}

err := json. NewEncoder (scrittore).Encode (risposta)

Se ehm!= zero {
tronco d'albero. Fatalln (err)
}
}

Il ciao handler function è la funzione handler per il OTTENERE richiesta.

Nel principale funzione, il router variabile è un'istanza del router Chi. È possibile specificare un metodo di richiesta con il nome del metodo; in questo caso, Ottenere accetta come parametri l'identificatore della funzione route e handler.

3. Il pacchetto HTTPRouter

Il HttpRouter package è un multiplexer di richieste leggero e altamente performante. Fornisce più funzionalità rispetto a Serve Mux implementazione del pacchetto http.

Il pacchetto HttpRouter ha un footprint di memoria ridotto, prestazioni elevate e una buona scalabilità. È uno dei router più antichi e utilizzati nell'ecosistema Go, implementato in molti framework Go popolari, Compreso la biblioteca del Gin.

L'esecuzione di questo comando sul terminale della directory di lavoro installerà il pacchetto HttpRouter.

andare ottenere github.com/julienschmidt/httprouter

Il routing con HttpRouter è leggermente diverso dai router Chi e Gorilla Mux.

Ecco come impostare una semplice richiesta GET con il pacchetto HttpRouter.

importare (
"codifica/json"
"github.com/julienschmidt/httprouter"
"tronco d'albero"
"rete/http"
)

funzprincipale() {
router := httprouter. Nuovo()
router. GET("/ciao", ciao)
err := http. ListenAndServe(":8000", router)

Se ehm!= zero {
Restituzione
}
}

funzciao(scrittore http. ResponseWriter, richiesta *http. Richiesta, _ httprouter. parametri) {
risposta := Info {
Messaggio: "Successo",
Descrizione: "Hai raggiunto con successo l'endpoint API",
}

err := json. NewEncoder (scrittore).Encode (risposta)

Se ehm!= zero {
tronco d'albero. Fatalln (err)
}
}

Le funzioni del gestore per il pacchetto HttpRouter devono avere l'estensione Param metodo del router HTTP.

Il router variabile è un'istanza di HttpRouter. È possibile impostare una richiesta GET con il OTTENERE metodo che accetta la route e l'identificatore della funzione del gestore.

4. Il router Pat

colpetto è un multiplexer di richieste HTTP in stile Sinatra che funziona con il pacchetto net/http di Go. Il router Pat non ha altre funzionalità oltre al routing.

Esegui questo comando nella tua directory di lavoro per installare Pat Router

andare ottenere github.com/bmizerany/pat

Il router Pat implementa funzionalità simili a Serve Mux metodo.

Ecco come puoi gestire l'instradamento delle richieste con il colpetto pacchetto.

importare (
"codifica/json"
"github.com/bmizerany/pat"
"tronco d'albero"
"rete/http"
)

funzciao(scrittore http. ResponseWriter, richiesta *http. Richiesta) {
risposta := Info {
Messaggio: "Successo",
Descrizione: "Hai raggiunto con successo l'endpoint",
}

err := json. NewEncoder (scrittore).Encode (risposta)

Se ehm!= zero {
tronco d'albero. Fatalln("err")
}
}

funzprincipale() {
router := pat. Nuovo() // istanza del router
router. Get("/ciao", http. HandlerFunc (ciao))
http. Maniglia("/", router)
err := http. ListenAndServe(":12345", zero)

Se ehm!= zero {
tronco d'albero. Fatal ("Ascolta e servi: ", err)
}
}

Il Nuovo il metodo restituisce un'istanza del router. Dovrai avvolgere la funzione del gestore con il HandlerFunc metodo. È quindi possibile utilizzare il Maneggiare metodo per specificare un percorso radice e montare l'istanza del router prima di avviare un server.

Costruire un router non è così difficile

Tutti i router in questo articolo implementano funzionalità dai pacchetti net e http. Puoi controllare la documentazione del metodo ServeMux per imparare come replicare un router con funzionalità extra per soddisfare le tue esigenze.

Framework come Gin e Fiber includono funzionalità di routing dal pacchetto di rete o da pacchetti esterni che lo implementano.