Maison > Article > développement back-end > Comment implémenter le regroupement d'itinéraires en langage Go
Le langage Go est un langage de programmation simple et efficace qui est également largement utilisé dans le domaine du développement web. Dans le développement Web, le routage est un élément essentiel. Le regroupement de routage est une fonction de routage plus avancée, qui peut rendre le code plus clair et concis, et améliorer la lisibilité et la maintenabilité du code.
Cet article présentera en détail comment implémenter le regroupement de routage dans le langage Go, à la fois du point de vue du principe et de l'implémentation du code.
1. Le principe du regroupement
Le regroupement d'itinéraires équivaut à regrouper certains itinéraires présentant des caractéristiques similaires pour la gestion. Par exemple, nous pouvons regrouper toutes les routes API dans un groupe API et toutes les routes de gestion en arrière-plan dans un groupe Admin.
Lors de l'implémentation du regroupement de routage, nous devons d'abord définir une structure de regroupement de routage, comme indiqué ci-dessous :
tapez RouteGroup struct {
pathPrefix string router *mux.Router
}
où pathPrefix représente le préfixe du groupe de routage et router est l'instance de routeur.
Ensuite, nous pouvons définir certaines méthodes dans la structure RouteGroup, telles que Get(), Post(), Put(), Delete(), etc. La fonction de ces méthodes est d'ajouter des fonctions de traitement à la route spécifiée, comme ci-dessous :
func (rg *RouteGroup) Get(chaîne de chemin, gestionnaire http.HandlerFunc) {
rg.router.HandleFunc(rg.pathPrefix+path, handler).Methods("GET")
}
func (rg *RouteGroup) Post(chaîne de chemin, gestionnaire http.HandlerFunc) {
rg.router.HandlerFunc(rg.pathPrefix+path, handler).Methods("POST")
}
.. .
Dans le regroupement de routes, utilisez Get(), Post(), Put(), Delete() et d'autres méthodes pour ajouter des fonctions de traitement à la route spécifiée, comme indiqué ci-dessous :
apiHandler := func( w http .ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "This is API handler!")
}
AdminHandler := func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "This is Admin handler!")
}
// Créer un routeur
r := mux. NewRouter( )
// Créer un groupe de routage API
apiGroup := &RouteGroup{pathPrefix: "/api", router: r}
apiGroup.Get("/articles", apiHandler)
apiGroup.Post("/articles", apiHandler)
// Créer un groupe de routage de gestion en arrière-plan
adminGroup := &RouteGroup{pathPrefix: "/admin", router: r}
adminGroup.Get("/articles", AdminHandler)
adminGroup.Post("/articles" , AdminHandler)
Grâce au code ci-dessus, nous avons réussi à créer deux groupes de routage, à savoir le groupe de routage API et le groupe de routage de gestion en arrière-plan.
2. Implémentation du code
Ensuite, nous utiliserons un exemple de code complet pour démontrer comment implémenter le regroupement de routes en langage Go.
Tout d'abord, nous devons installer le routeur mux, qui peut être installé via la commande suivante :
go get -u github.com/gorilla/mux
Le code suivant montre comment créer des routeurs et des groupes de routage via mux :
package main
import (
"net/http" "github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter() // 创建API路由分组 apiGroup := &RouteGroup{pathPrefix: "/api", router: r.PathPrefix("/api").Subrouter()} apiGroup.Get("/articles", apiHandler) apiGroup.Post("/articles", apiHandler) // 创建后台管理路由分组 adminGroup := &RouteGroup{pathPrefix: "/admin", router: r.PathPrefix("/admin").Subrouter()} adminGroup.Get("/articles", AdminHandler) adminGroup.Post("/articles", AdminHandler) http.ListenAndServe(":8080", r)
}
Dans le code ci-dessus, nous avons créé deux groupes de routage (apiGroup et adminGroup) via la méthode PathPrefix(), puis avons utilisé Subrouter () La méthode les ajoute au routeur r.
Ensuite, nous devons implémenter les méthodes Get(), Post() et Put() dans le type RouteGroup pour ajouter des fonctions de traitement pour la route spécifiée. Le code complet est le suivant :
package main
import (
"fmt" "net/http" "github.com/gorilla/mux"
)
type RouteGroup struct {
pathPrefix string router *mux.Router
}
func (rg *RouteGroup) Get(path string, handler http.HandlerFunc) {
rg.router.HandleFunc(fmt.Sprintf("%s/%s", rg.pathPrefix, path), handler).Methods(http.MethodGet)
}
func (rg *RouteGroup) Post(chaîne de chemin, gestionnaire http.HandlerFunc) {
rg.router.HandleFunc(fmt.Sprintf("%s/%s", rg.pathPrefix, path), handler).Methods(http.MethodPost)
}
func (rg *RouteGroup) Put(chaîne de chemin, gestionnaire http.HandlerFunc) {
rg.router.HandleFunc(fmt.Sprintf("%s/%s", rg.pathPrefix, path), handler).Methods(http.MethodPut)
}
func apiHandler (avec http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "This is API handler!")
}
func AdminHandler (avec http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "This is Admin handler!")
}
func main() {
r := mux.NewRouter() // 创建API路由分组 apiGroup := &RouteGroup{pathPrefix: "/api", router: r.PathPrefix("/api").Subrouter()} apiGroup.Get("/articles", apiHandler) apiGroup.Post("/articles", apiHandler) // 创建后台管理路由分组 adminGroup := &RouteGroup{pathPrefix: "/admin", router: r.PathPrefix("/admin").Subrouter()} adminGroup.Get("/articles", AdminHandler) adminGroup.Post("/articles", AdminHandler) http.ListenAndServe(":8080", r)
}
Grâce à l'implémentation du code ci-dessus, nous avons réussi à créer le regroupement de routes et à spécifier la fonction de traitement pour chaque route.
Résumé :
Cet article présente comment implémenter le regroupement de routes en langage Go. Nous avons d'abord parlé du principe du regroupement de routes, c'est-à-dire que grâce à des structures et des méthodes personnalisées, la même fonction de traitement est attribuée à un groupe de routes, et via un routeur Réaliser la gestion de tous les groupes de routage. Ensuite, nous avons démontré en détail comment utiliser mux pour implémenter le regroupement de routes et donné un exemple de code complet. J'espère que cet article pourra aider les lecteurs à mieux comprendre la mise en œuvre du regroupement de routage en langage Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!