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.
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 denet/http
pour écrire un intercepteur : rrreee
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.
Authentification et autorisation
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!