Maison  >  Article  >  développement back-end  >  Comment implémenter un middleware de routage en langage Go

Comment implémenter un middleware de routage en langage Go

王林
王林original
2023-12-17 17:28:001317parcourir

Comment implémenter un middleware de routage en langage Go

Comment implémenter un middleware de routage en langage Go, des exemples de code spécifiques sont nécessaires

Introduction :

Dans le développement Web en langage Go, le routage est un élément indispensable. Le middleware de routage est un module fonctionnel qui est exécuté avant que la requête n'atteigne la fonction de traitement cible. Ils peuvent intercepter, vérifier, enregistrer et autres opérations sur les requêtes, aidant ainsi les développeurs à gérer certaines fonctions courantes et à améliorer la réutilisabilité du code.

Cet article présentera comment implémenter un middleware de routage en langage Go et fournira des exemples de code spécifiques.

1. Utilisez la bibliothèque gorilla/mux pour implémenter le middleware de routage

  1. Installez la bibliothèque gorilla/mux

Exécutez la commande suivante dans le terminal pour installer la bibliothèque gorilla/mux :

go get -u github.com/gorilla/mux
  1. Créez un middleware de routage

Commençons maintenant Pour créer un middleware de routage, créez d'abord un nouveau fichier middleware.go pour définir notre fonction middleware.

package main

import (
    "fmt"
    "net/http"

    "github.com/gorilla/mux"
)

func middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 在请求到达目标处理函数之前执行的操作
        
        fmt.Println("Executing middleware")

        // 调用下一个中间件或目标处理函数
        next.ServeHTTP(w, r)
    })
}

func main() {
    r := mux.NewRouter()

    // 使用我们的中间件
    r.Use(middleware)

    // 路由定义
    r.HandleFunc("/", homeHandler).Methods("GET")

    // 启动服务器
    http.ListenAndServe(":8080", r)
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
}

Dans le code ci-dessus, nous définissons une fonction appelée middleware, qui accepte ensuite un paramètre de type http.Handler. Nous enveloppons la fonction du gestionnaire cible en renvoyant un nouveau http.Handler. Dans le gestionnaire encapsulé, nous pouvons ajouter notre logique personnalisée, puis appeler next.ServeHTTP(w, r) pour transmettre la demande au prochain middleware ou à la fonction de gestionnaire cible.

Dans la fonction principale, nous appliquons notre middleware à toutes les routes via r.Use(middleware).

  1. Exécutez le code

Exécutez la commande suivante dans le terminal pour exécuter le code :

go run main.go

Maintenant, lorsque nous visitons localhost:8080, nous pouvons voir la sortie « Exécution du middleware » dans la console.

2. Utilisez la bibliothèque net/http pour implémenter un middleware de routage

Si vous n'utilisez pas de bibliothèque tierce, nous pouvons également utiliser la bibliothèque net/http pour implémenter un middleware de routage.

Ce qui suit est un exemple de code spécifique :

package main

import (
    "fmt"
    "log"
    "net/http"
)

type MyHandler struct{}

func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Println("Executing middleware")
    // 调用目标处理函数
    homeHandler(w, r)
}

func middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 在请求到达目标处理函数之前执行的操作
        fmt.Println("Executing middleware")
        next.ServeHTTP(w, r)
    })
}

func main() {
    mux := http.NewServeMux()

    // 创建中间件
    handler := middleware(&MyHandler{})

    // 设置路由
    mux.Handle("/", handler)

    // 启动服务器
    log.Fatal(http.ListenAndServe(":8080", mux))
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
}

Dans le code ci-dessus, nous définissons une fonction nommée middleware, qui accepte un paramètre suivant de type http.Handler. Nous enveloppons la fonction du gestionnaire cible en renvoyant un nouveau http.Handler. Dans le gestionnaire encapsulé, nous pouvons ajouter notre logique personnalisée, puis appeler next.ServeHTTP(w, r) pour transmettre la demande au prochain middleware ou à la fonction de gestionnaire cible.

Dans la fonction principale, nous créons un nouveau ServeMux et utilisons mux.Handle("/", handler) pour appliquer notre middleware à la route racine.

  1. Exécutez le code

Exécutez la commande suivante dans le terminal pour exécuter le code :

go run main.go

Maintenant, lorsque nous visitons localhost:8080, nous pouvons voir la sortie "Exécution du middleware" dans la console.

Conclusion :

Grâce à l'exemple de code ci-dessus, nous avons appris comment implémenter un middleware de routage en langage Go. Le middleware de routage peut être facilement implémenté à l’aide de bibliothèques tierces ou directement à l’aide de la bibliothèque net/http. Cette fonctionnalité peut nous aider à répondre à certaines exigences fonctionnelles courantes, à améliorer la réutilisabilité du code et à rendre nos applications plus flexibles et plus faciles à maintenir. J'espère que cet article vous sera utile !

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn