Maison  >  Article  >  développement back-end  >  Démystifier le mécanisme d'interception dans Golang

Démystifier le mécanisme d'interception dans Golang

王林
王林original
2024-04-08 08:39:021170parcourir

Interceptor est un modèle de conception qui permet d'insérer un comportement personnalisé avant et après l'exécution de la méthode. Dans Go, il peut être implémenté via un middleware net/http. Il présente les avantages d'évolutivité, de réutilisabilité, de testabilité, etc. et peut être utilisé dans des scénarios tels que l'authentification, l'autorisation, la mise en cache, la journalisation et la gestion personnalisée des erreurs.

揭秘 Golang 中的拦截器机制

Démystifier le mécanisme d'interception dans Golang

Introduction

Interceptor est un modèle de conception qui permet d'insérer un comportement personnalisé avant ou après l'exécution d'une méthode. Dans Go, les intercepteurs peuvent être implémentés en écrivant un middleware net/http. net/http 中间件实现。

具体实现

以下是一个使用 net/http 编写拦截器的示例:

package main

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

func main() {
    // 创建一个新的中间件函数
    logMiddleware := func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            log.Println("Request received:", r.URL.Path)
            // 调用下一个处理程序
            next.ServeHTTP(w, r)
        })
    }

    // 创建一个新的 HTTP 处理程序
    mux := http.NewServeMux()
    mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello, World!")
    })

    // 将中间件应用到处理程序
    http.Handle("/", logMiddleware(mux))

    // 启动 HTTP 服务器
    log.Println("Listening on port 8080")
    http.ListenAndServe(":8080", nil)
}

原理

该拦截器使用 net/http.HandlerFunc 创建一个新的 HTTP 处理程序。此处理程序在请求到达原始处理程序之前和之后执行。在我们的示例中,logMiddleware

Implémentation spécifique

Ce qui suit est un exemple d'utilisation de net/http pour écrire un intercepteur :

rrreee

    Principe
  • Cet intercepteur utilise net/http.HandlerFunc Créez un nouveau gestionnaire HTTP. Ce gestionnaire est exécuté avant et après que la requête atteigne le gestionnaire d'origine. Dans notre exemple, <code>logMiddleware enregistre la requête reçue avant que le gestionnaire ne reçoive la requête et appelle le gestionnaire suivant.
  • Cas pratiques
Les intercepteurs peuvent être utilisés dans une variété de scénarios, notamment :

Authentification et autorisation

    Mise en cache
  • Logging et surveillance
  • Gestion personnalisée des erreurs
🎜Avantages 🎜🎜🎜🎜 Extensibilité disponible : Les intercepteurs vous permettent d'ajouter facilement de nouvelles fonctionnalités à votre application sans modifier le code existant. 🎜🎜Réutilisabilité : les intercepteurs peuvent être réutilisés sur plusieurs points de terminaison ou gestionnaires. 🎜🎜Testabilité : les intercepteurs sont des composants modulaires faciles à tester et à entretenir. 🎜🎜

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