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