Maison > développement back-end > Golang > le corps du texte

Intercepteurs Golang : en un coup d'œil

WBOY
Libérer: 2024-04-07 21:24:02
original
964 Les gens l'ont consulté

Présentation : Go interceptor est un mécanisme qui gère la logique pré- et post-fonction mise en œuvre via un logiciel intermédiaire. Principe : L'intercepteur est passé à la fonction en tant que paramètre, et la logique avant et après l'exécution de la fonction. Combat pratique : démontre l'utilisation d'intercepteurs en créant un intercepteur qui enregistre les heures de requête, vérifie les paramètres de requête, et le relie à un gestionnaire HTTP.

Golang 拦截器: 一览无余

Go Interceptor : en un coup d'œil

Introduction

Un intercepteur est un mécanisme qui effectue un certain traitement avant et après l'exécution d'une fonction. Dans Golang, les intercepteurs peuvent être implémentés à l'aide d'un middleware.

Principe

Les intercepteurs fonctionnent en se passant comme arguments à la fonction à intercepter. Lorsqu'une fonction est appelée, l'intercepteur exécutera sa logique avant et après l'exécution de la fonction.

Cas pratique

Nous créons un serveur HTTP simple pour montrer comment utiliser les intercepteurs :

package main

import (
    "log"
    "net/http"
)

func main() {
    // 创建一个记录请求时间的拦截器
    timeInterceptor := func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            start := time.Now()
            defer func() { log.Printf("请求处理耗时:%fs", time.Since(start).Seconds()) }()
            next.ServeHTTP(w, r)
        })
    }

    // 创建一个校验请求参数的拦截器
    paramInterceptor := func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            if r.URL.Query().Get("id") == "" {
                http.Error(w, "缺少参数:id", http.StatusBadRequest)
                return
            }
            next.ServeHTTP(w, r)
        })
    }

    // 将拦截器与 HTTP 处理程序链接
    handler := paramInterceptor(timeInterceptor(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello, World!"))
    })))

    // 启动服务器
    log.Fatal(http.ListenAndServe(":8080", handler))
}
Copier après la connexion

Dans cet exemple, timeInterceptor 拦截器记录请求处理时间,而 paramInterceptor l'intercepteur vérifie les paramètres de la requête. En chaînant les intercepteurs, nous pouvons exécuter cette logique avant et après le traitement de la requête.

Résumé

Les intercepteurs sont des outils puissants pour améliorer les fonctionnalités des programmes Golang. Ils vous permettent d'exécuter du code personnalisé avant et après l'exécution d'une fonction, permettant des opérations telles que la journalisation, l'authentification et l'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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!