ホームページ  >  記事  >  バックエンド開発  >  Golang インターセプター: 概要

Golang インターセプター: 概要

WBOY
WBOYオリジナル
2024-04-07 21:24:02966ブラウズ

概要: Go インターセプターは、仲介ソフトウェアを介して実装される関数の前後のロジックを処理するメカニズムです。原則: インターセプターはパラメーターとして関数に渡され、関数の実行前後のロジックが実行されます。実践的な戦闘: リクエスト時間を記録し、リクエスト パラメータを検証するインターセプタを作成し、それを HTTP ハンドラにリンクすることで、インターセプタの使用方法を示します。

Golang 拦截器: 一览无余

Go インターセプター: 概要

はじめに

インターセプターは A です関数の実行の前後に何らかの処理を行うメカニズム。 Golang では、ミドルウェアを使用してインターセプターを実装できます。

原則

インターセプターは、インターセプトされる関数にパラメーターとして自分自身を渡すことによって機能します。関数が呼び出されると、インターセプターは関数の実行の前後にそのロジックを実行します。

実践的なケース

インターセプターの使用方法を示すために、単純な HTTP サーバーを作成します。

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

この例では、timeInterceptor インターセプターはリクエストの処理時間を記録し、paramInterceptor インターセプターはリクエスト パラメーターを検証します。インターセプターをチェーンすることで、リクエストの処理の前後にこのロジックを実行できます。

概要

インターセプターは、Golang プログラムの機能を強化する強力なツールです。これにより、関数の実行前後にカスタム コードを実行できるようになり、ログ記録、検証、承認などの操作が可能になります。

以上がGolang インターセプター: 概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。