Interceptor は、メソッド実行の前後にカスタム動作を挿入できるようにする設計パターンで、Go では net/http ミドルウェアを通じて実装できます。スケーラビリティ、再利用性、テスト容易性などの利点があり、認証、認可、キャッシュ、ロギング、カスタム エラー処理などのシナリオで使用できます。
はじめに
インターセプターは設計パターンです。メソッドの実行前または後に挿入できます。 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 サイトの他の関連記事を参照してください。