Maison >développement back-end >Golang >Intercepteurs Golang : en un coup d'œil

Intercepteurs Golang : en un coup d'œil

WBOY
WBOYoriginal
2024-04-07 21:24:021004parcourir

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))
}

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!

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