ホームページ >バックエンド開発 >Golang >Golang のインターセプター メカニズムを解明する

Golang のインターセプター メカニズムを解明する

王林
王林オリジナル
2024-04-08 08:39:021208ブラウズ

Interceptor は、メソッド実行の前後にカスタム動作を挿入できるようにする設計パターンで、Go では net/http ミドルウェアを通じて実装できます。スケーラビリティ、再利用性、テスト容易性などの利点があり、認証、認可、キャッシュ、ロギング、カスタム エラー処理などのシナリオで使用できます。

揭秘 Golang 中的拦截器机制

Golang のインターセプター メカニズムをわかりやすく理解する

はじめに

インターセプターは設計パターンです。メソッドの実行前または後に挿入できます。 Go では、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 が受信したリクエストをログに記録します。

実践的なケース

インターセプターは、次のようなさまざまなシナリオで使用できます。

  • 認証と認可
  • キャッシュ
  • ログとモニタリング
  • カスタム エラー処理

利点

  • スケーラビリティ: インターセプト このツールを使用すると、次のことが可能になります。既存のコードを変更せずに、アプリケーションに新しい機能を簡単に追加できます。
  • 再利用性: インターセプターは複数のエンドポイントまたはハンドラー間で再利用できます。
  • テスト容易性: インターセプターは、テストと保守が簡単なモジュール式コンポーネントです。

以上がGolang のインターセプター メカニズムを解明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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