Le routage Web est une technique d'attribution de requêtes HTTP à des fonctions de gestionnaire qui fonctionnent sur le chemin d'URL spécifié. Le routage est souvent utilisé pour créer des applications monopage (SPA) et des API. Dans le routeur, le code définit la séquence d'actions accompagnant la demande d'un utilisateur.

La bibliothèque standard Go possède la plupart des fonctionnalités dont vous aurez besoin pour créer des applications Web, y compris le routage. Vous pouvez utiliser le ServeMux tapez dans le réseau/http package pour la gestion de route de base. Si vous avez besoin d'une gestion d'itinéraire plus complexe, vous avez le choix entre de nombreux packages de routage.

Premiers pas avec le routage dans Go

L'écosystème de Go héberge des packages de routage qui éliminent l'inutile et facilitent la création d'applications et de services Web.

De nombreux frameworks Web Go implémentent certains de ces packages de routage.

Voici un modèle de structure simple pour le JSON réponse que vous renverrez au client dans ce didacticiel.

instagram viewer
taper Info structure {
Message chaîne de caractères`json:"message"`
La description chaîne de caractères`json:"description"`
}

La plupart des routeurs Go utilisent encore le net/http ResponseWriter et Demande méthodes en tant que paramètres dans les fonctions de gestionnaire.

fonctionbonjour(écrivain http. ResponseWriter, demande *http. Demande) {
// logique métier de la fonction de gestionnaire ici
}

De plus, vous devrez démarrer un serveur avec le ÉcouterEtServir méthode pour démarrer le serveur dans la plupart des packages.

euh := http. EcouteEtServe(":8000", routeur)

si erreur != néant {
revenir
}

Voici quelques-uns des packages de routage les plus populaires dans l'écosystème Go.

1. Le routeur Gorilla Mux

Le package Gorilla Mux implémente à la fois un routeur de requêtes et un répartiteur de requêtes pour les requêtes HTTP. C'est comme le http. ServeMux méthode mais avec des fonctionnalités supplémentaires.

Le routeur Gorilla Mux implémente le http. Gestionnaire l'interface et ses méthodes sont compatibles avec ServeMux méthode. Le package implémente également plusieurs schémas d'URL et vous pouvez utiliser des routeurs comme sous-routeurs (routes imbriquées) pour définir des routes similaires.

La Gorille Mux fait partie de la boîte à outils Web Gorilla. La boîte à outils comprend des packages liés au Web pour résoudre de nombreux problèmes de garder les utilisateurs connectés avec Sessions au stockage de données à l'aide de cookies.

Exécutez cette commande dans le terminal de votre espace de travail pour installer le package Gorilla Mux.

aller obtenir -u github.com/gorilla/mux

Voici comment configurer un OBTENIR request route vers une fonction de gestionnaire qui encode une réponse JSON avec le package Gorilla Mux.

importer (
"encodage/json"
"github.com/gorille/mux"
"Journal"
"net/http"
)

fonctionbonjour(écrivain http. ResponseWriter, demande *http. Demande) {
réponse := Infos {
Message: "Succès",
Description: "Vous avez réussi à écrire au client",
}

erreur := json. NewEncoder (écrivain).Encode (réponse)

si erreur != néant {
Journal. Fataln (erreur)
}
}

fonctionprincipale() {
routeur := multiplexeur. NouveauRouteur()
routeur. HandleFunc("/hello", hello).Methods("GET")
euh := http. EcouteEtServe(":8000", routeur)

si erreur != néant {
revenir
}
}

La bonjour La fonction de gestionnaire encode la structure en JSON à l'aide de la Encoder méthode de la NouveauEncodeur structure.

La principale La fonction attribue une nouvelle instance de routeur Gorilla Mux au routeur variable. Il appelle ensuite le HandleFunc méthode pour mapper la route vers la fonction de gestionnaire. Vous pouvez utiliser le Méthodes méthode pour spécifier un type de demande.

2. Le routeur Chi

La Routeur Chi est un routeur léger, rapide et composable pour créer des services Web basés sur HTTP dans Go. Le routeur Chi est compatible avec le http package, et il n'y a pas de dépendances externes pour le routeur.

Contrairement à de nombreux routeurs, Chi fournit un contrôle de contexte avec le le contexte package pour un traitement rapide des demandes.

Installez le routeur Chi sur vos modules Go avec cette commande.

aller obtenir github.com/aller-chi/chi

Le routage avec le routeur Gorilla Mux et le routeur Chi est très similaire. Voici comment vous pouvez configurer un similaire OBTENIR request qui encode la structure en JSON en tant que réponse.

importer (
"encodage/json"
"github.com/aller-chi/chi/v5"
"Journal"
"net/http"
)

fonctionprincipale() {
routeur := chi. NouveauRouteur()
routeur. Get("/bonjour", bonjour)
euh := http. EcouteEtServe(":8000", routeur)

si erreur != néant {
revenir
}
}

fonctionbonjour(écrivain http. ResponseWriter, demande *http. Demande) {
réponse := Infos {
Message: "Succès",
Description: "Vous avez réussi à écrire au client",
}

erreur := json. NewEncoder (écrivain).Encode (réponse)

si erreur != néant {
Journal. Fataln (erreur)
}
}

La bonjour fonction de gestionnaire est la fonction de gestionnaire pour le OBTENIR demande.

Dans le principale fonction, la routeur variable est une instance de routeur Chi. Vous pouvez spécifier une méthode de requête avec le nom de la méthode; dans ce cas, Obtenir prend la route et l'identifiant de la fonction de gestionnaire en tant que paramètres.

3. Le package HttpRouter

La HttpRouter package est un multiplexeur de requêtes très performant et léger. Il offre plus de fonctionnalités que le ServeMux implémentation du package http.

Le package HttpRouter a une faible empreinte mémoire, des performances élevées et une bonne évolutivité. C'est l'un des routeurs les plus anciens et les plus utilisés de l'écosystème Go, implémenté dans de nombreux frameworks Go populaires, y compris la bibliothèque Gin.

L'exécution de cette commande sur le terminal de votre répertoire de travail installera le package HttpRouter.

aller obtenir github.com/julienschmidt/httprouter

Le routage avec HttpRouter diffère légèrement des routeurs Chi et Gorilla Mux.

Voici comment configurer une simple requête GET avec le package HttpRouter.

importer (
"encodage/json"
"github.com/julienschmidt/httprouter"
"Journal"
"net/http"
)

fonctionprincipale() {
routeur := httprouteur. Nouveau()
routeur. GET("/bonjour", bonjour)
euh := http. EcouteEtServe(":8000", routeur)

si erreur != néant {
revenir
}
}

fonctionbonjour(écrivain http. ResponseWriter, demande *http. Demande, _ httprouter. Paramètres) {
réponse := Infos {
Message: "Succès",
Description: "Vous avez réussi à atteindre le point de terminaison de l'API",
}

erreur := json. NewEncoder (écrivain).Encode (réponse)

si erreur != néant {
Journal. Fataln (erreur)
}
}

Les fonctions de gestionnaire pour le package HttpRouter doivent avoir le Paramètres méthode du routeur HTTP.

La routeur variable est une instance de HttpRouter. Vous pouvez configurer une requête GET avec le OBTENIR méthode qui prend en compte la route et l'identifiant de la fonction de gestionnaire.

4. Le routeur Pat

Tapoter est un multiplexeur de requêtes HTTP de style Sinatra qui fonctionne avec le package net/http de Go. Le routeur Pat n'a pas d'autres fonctionnalités que le routage.

Exécutez cette commande dans votre répertoire de travail pour installer le routeur Pat

aller obtenir github.com/bmizerany/pat

Le routeur Pat implémente des fonctionnalités similaires au ServeMux méthode.

Voici comment vous pouvez gérer le routage des demandes avec le tapoter forfait.

importer (
"encodage/json"
"github.com/bmizerany/pat"
"Journal"
"net/http"
)

fonctionbonjour(écrivain http. ResponseWriter, demande *http. Demande) {
réponse := Infos {
Message: "Succès",
Description: "Vous avez réussi à atteindre le point de terminaison",
}

erreur := json. NewEncoder (écrivain).Encode (réponse)

si erreur != néant {
Journal. Fataln("err")
}
}

fonctionprincipale() {
routeur := pat. Nouveau() // instance de routeur
routeur. Obtenir("/bonjour", http. HandlerFunc (bonjour))
http. Poignée("/", routeur)
euh := http. EcouteEtServe(":12345", néant)

si erreur != néant {
Journal. Fatal("ÉcouterEtServer: ", erreur)
}
}

La Nouveau La méthode renvoie une instance de routeur. Vous devrez envelopper la fonction de gestionnaire avec le HandlerFunc méthode. Vous pouvez ensuite utiliser le Gérer pour spécifier un chemin racine et monter l'instance de routeur avant de démarrer un serveur.

Construire un routeur n'est pas si difficile

Tous les routeurs de cet article implémentent les fonctionnalités des packages net et http. Vous pouvez consulter la documentation de la méthode ServeMux pour savoir comment répliquer un routeur avec des fonctionnalités supplémentaires adaptées à vos besoins.

Des frameworks tels que Gin et Fiber incluent une fonctionnalité de routage à partir du package net ou de packages externes qui l'implémentent.