Maison >développement back-end >Golang >Maîtriser les intercepteurs à Golang
Les intercepteurs permettent d'insérer une logique personnalisée dans les applications Go sans modifier le code existant. Ils peuvent être utilisés pour l'authentification, la journalisation, la gestion des erreurs, la surveillance des performances, etc. La création d'un intercepteur nécessite l'implémentation de l'interface Handler, qui définit la méthode ServeHTTP() pour gérer les requêtes HTTP et la méthode Next() pour passer le contrôle. Des exemples pratiques montrent comment utiliser les intercepteurs de journalisation pour enregistrer les chemins d'URL de toutes les requêtes entrantes et comment chaîner plusieurs intercepteurs (tels que les intercepteurs d'authentification) pour créer une logique d'application complexe.
Maîtriser les intercepteurs dans Golang
Introduction
Les intercepteurs sont un mécanisme puissant et flexible qui nous permet d'intégrer une logique personnalisée dans les applications Golang sans avoir à modifier le code existant. Ils peuvent être utilisés à diverses fins, notamment l’authentification, la journalisation, la gestion des erreurs et la surveillance des performances.
Créer un intercepteur
Pour créer un intercepteur, nous devons implémenter l'interface Handler
. Cette interface définit deux méthodes : Handler
接口。该接口定义了两个方法:
ServeHTTP(ResponseWriter, *Request)
:处理 HTTP 请求并生成响应。Next(ResponseWriter, *Request)
ServeHTTP(ResponseWriter, *Request)
: Traiter les requêtes HTTP et générer des réponses. Next(ResponseWriter, *Request)
: passez le contrôle au prochain gestionnaire ou intercepteur. package main import ( "fmt" "net/http" ) func main() { // 创建一个简单的日志拦截器 logger := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Printf("收到请求:%s\n", r.URL.Path) next.ServeHTTP(w, r) }) } // 创建一个 HTTP 路由器并使用拦截器 mux := http.NewServeMux() mux.Handle("/", logger(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, world!") }))) // 启动 HTTP 服务器 http.ListenAndServe(":8080", mux) }Cas pratique Dans cet exemple, nous avons créé un simple intercepteur de journal chargé d'imprimer le chemin URL de toutes les requêtes entrantes vers la console .
Utilisation de plusieurs intercepteurs
Nous pouvons enchaîner plusieurs intercepteurs pour créer une logique d'application complexe. Par exemple, nous pouvons créer un intercepteur d'authentification chargé de garantir que seuls les utilisateurs authentifiés peuvent accéder à certains points de terminaison :// 身份验证拦截器 func auth(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 检查请求头中是否存在身份验证令牌 if r.Header.Get("Authorization") == "" { http.Error(w, "未经授权", http.StatusUnauthorized) return } next.ServeHTTP(w, r) }) }Nous pouvons ajouter cet intercepteur à notre routeur comme ceci : 🎜
mux.Handle("/private", auth(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 私有区域的逻辑 })))
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!