Gorilla Mux pour Go : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Gorilla Mux et pourquoi en a-t-on besoin ?

\n\n

Gorilla Mux (souvent appelé simplement "mux" pour "multiplexer") est un routeur HTTP puissant et populaire pour le langage de programmation Go. Il fait partie de l'écosystème Gorilla Web Toolkit, qui fournit de nombreux composants utiles pour le développement web.

\n\n

Pourquoi un routeur séparé est-il nécessaire, alors que la bibliothèque standard de Go contient déjà net/http ? Le http.ServeMux standard est parfait pour les projets simples, mais présente un certain nombre de limitations :

\n
    \n
  • Pas de support des segments de chemin dynamiques (par exemple, /users/{id}).
  • \n
  • Pas de support des méthodes HTTP (GET, POST, PUT, DELETE) — il faut vérifier manuellement.
  • \n
  • Pas de support des expressions régulières dans les routes.
  • \n
  • Pas de middleware intégré (logiciel intermédiaire).
  • \n
\n\n

Gorilla Mux résout tous ces problèmes. Il permet :

\n
    \n
  • Définir des routes complexes avec des parties variables.
  • \n
  • Restreindre les routes par méthodes HTTP, hôtes, en-têtes et paramètres de requête.
  • \n
  • Utiliser des sous-routeurs (subrouters) pour regrouper les routes.
  • \n
  • S'intégrer facilement avec les middleware.
  • \n
  • Construire des API RESTful avec des URL propres et compréhensibles.
  • \n
\n\n

La bibliothèque Gorilla Mux est la norme de facto pour la construction de serveurs HTTP en Go. Elle est utilisée dans des milliers de projets, des petits microservices aux grandes applications commerciales.

\n\n

Installation

\n\n

L'installation de Gorilla Mux dans un projet Go se fait via le gestionnaire de paquets go get. Ouvrez un terminal à la racine de votre projet et exécutez la commande :

\n\n
go get -u github.com/gorilla/mux
\n\n

Cette commande téléchargera la bibliothèque et l'ajoutera à votre fichier go.mod. Ensuite, vous pouvez l'importer dans votre code :

\n\n
import "github.com/gorilla/mux"
\n\n

Si vous utilisez Go Modules (ce qui est la norme pour Go 1.16+), la bibliothèque sera automatiquement ajoutée à vos fichiers go.mod et go.sum. Tout est prêt pour travailler !

\n\n

Démarrage rapide : un serveur HTTP simple avec Gorilla Mux

\n\n

Créons un serveur web minimal qui traitera les requêtes GET sur le chemin racine et renverra un message de bienvenue.

\n\n
package main\n\nimport (\n    "fmt"\n    "log"\n    "net/http"\n\n    "github.com/gorilla/mux"\n)\n\nfunc main() {\n    // Créer un nouveau routeur\n    r := mux.NewRouter()\n\n    // Définir la route : GET /\n    r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n        fmt.Fprintf(w, "Bonjour le monde ! C'est Gorilla Mux !")\n    })\n\n    // Démarrer le serveur sur le port 8080\n    log.Println("Serveur démarré sur http://localhost:8080")\n    log.Fatal(http.ListenAndServe(":8080", r))\n}
\n\n

Exécutez ce code (go run main.go) et ouvrez http://localhost:8080 dans votre navigateur. Vous verrez le message "Bonjour le monde ! C'est Gorilla Mux !".

\n\n

Remarquez que nous passons notre routeur r à http.ListenAndServe. C'est possible car mux.Router implémente l'interface http.Handler.

\n\n

Méthodes et fonctions principales de Gorilla Mux

\n\n

Examinons les méthodes clés de la bibliothèque. Chaque méthode sera accompagnée d'une description, de paramètres et d'un exemple fonctionnel.

\n\n

1. mux.NewRouter()

\n

Ce qu'elle fait : Crée une nouvelle instance de routeur. C'est le point de départ pour toutes les routes.

\n

Paramètres : Aucun.

\n

Retourne : Un pointeur vers mux.Router.

\n\n
r := mux.NewRouter()\n// Maintenant r est prêt à définir des routes
\n\n

2. r.HandleFunc(path, handler)

\n

Ce qu'elle fait : Enregistre une fonction de gestionnaire pour le chemin donné. C'est la méthode principale pour définir des routes.

Recommendations