Golang でインターセプターをマスターする

王林
リリース: 2024-04-07 21:33:02
オリジナル
653 人が閲覧しました

インターセプターを使用すると、既存のコードを変更せずに Go アプリケーションにカスタム ロジックを挿入できます。これらは、認証、ロギング、エラー処理、パフォーマンス監視などに使用できます。インターセプターを作成するには、HTTP リクエストを処理するための ServeHTTP() メソッドと、制御を渡すための Next() メソッドを定義する Handler インターフェイスを実装する必要があります。実際の例では、ロギング インターセプターを使用してすべての受信リクエストの URL パスを記録する方法と、複数のインターセプター (認証インターセプターなど) をチェーンして複雑なアプリケーション ロジックを作成する方法を示します。

在 Golang 中驾驭拦截器

Golang でのインターセプターの管理

はじめに

インターセプターは強力で、既存のコードを変更することなく、Golang アプリケーションにカスタム ロジックを埋め込むことができる柔軟なメカニズムです。これらは、認証、ロギング、エラー処理、パフォーマンス監視など、さまざまな目的に使用できます。

インターセプターの作成

インターセプターを作成するには、Handler インターフェイスを実装する必要があります。このインターフェイスは 2 つのメソッドを定義します。

  • ServeHTTP(ResponseWriter, *Request): HTTP リクエストを処理し、レスポンスを生成します。
  • Next(ResponseWriter, *Request): 次のハンドラーまたはインターセプターに制御を渡します。

次はインターセプターの作成例です:

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)
}
ログイン後にコピー

実用的なケース

この例では、単純なログ インターセプターを作成しました。 、すべての受信リクエストの URL パスをコンソールに出力する役割を果たします。

複数のインターセプターの使用

複数のインターセプターをチェーンして、複雑なアプリケーション ロジックを作成できます。たとえば、認証されたユーザーのみが特定のエンドポイントにアクセスできるようにする認証インターセプターを作成できます:

// 身份验证拦截器
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)
    })
}
ログイン後にコピー

このインターセプターを次のようにルーターに追加できます:

mux.Handle("/private", auth(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    // 私有区域的逻辑
})))
ログイン後にコピー

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート