Gin フレームワークは、Go 言語をベースにした軽量の Web フレームワークで、効率性、柔軟性、拡張性が容易という利点があり、多くの開発者に愛されています。ミドルウェア メカニズムは、Gin フレームワークのハイライトです。この記事では、Gin フレームワークのミドルウェア メカニズムとそのアプリケーションについて詳しく説明します。
1. ミドルウェアとは
ミドルウェアとは、ネットワーク リクエストの処理過程でリクエストとレスポンスの処理ロジックをインターセプトして書き換えるプラグインを指します。 Go 言語では、通常、ミドルウェアは関数型を使用して実装されます。これらの関数をリクエストとレスポンスを処理する関数に仮パラメータとして渡すことで、Gin フレームワークのミドルウェアが実装されます。
Gin フレームワークでは、ミドルウェアはグローバル ミドルウェアとローカル ミドルウェアの 2 種類に分類されます。グローバル ミドルウェアはすべてのルートで動作しますが、ローカル ミドルウェアは特定のルートまたはルーティング グループで動作します。
2. Gin フレームワークのミドルウェアの仕組み
Gin フレームワークのミドルウェアの仕組みは非常にシンプルで、リクエストを処理する関数にミドルウェアを関数型として渡すだけです。そして反応。
たとえば、次のコードは単純なミドルウェアです:
func MyMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // do something c.Next() // do something after } }
このうち、MyMiddleware
関数は関数型を返すミドルウェア関数を定義します。返される関数タイプは、リクエストと応答を処理する関数で、通常は HandlerFunc
と呼ばれます。
HandlerFunc
は次のように定義されます。
type HandlerFunc func(*Context)
これは、リクエストのコンテキストを表す *Context
型のパラメーターを受け取ります。 #Context
タイプには、リクエスト ヘッダー、リクエスト本文、リクエスト パラメータなど、リクエスト内のさまざまな情報が含まれます。
ミドルウェア関数では、コンテキストを操作して c.Next()
メソッドを呼び出して、次のミドルウェアまたはルート処理関数に制御を移すことができます。
たとえば、ミドルウェアにリクエスト ヘッダーを追加したい場合は、次の方法で実行できます:
func AddHeader() gin.HandlerFunc { return func(c *gin.Context) { c.Header("X-Request-Id", "123456") c.Next() } }
このミドルウェアは XX-Request-Id を追加します# リクエストに ##Header を追加し、制御を次のハンドラー関数に渡します。ルーティング処理関数では、
c.GetHeader メソッドを通じてこのリクエスト ヘッダーの値を取得できます。
Use、
GET、
POST、
PUT、
DELETE に渡すだけで済みます。他の方法でも可能です。例:
import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // 使用全局中间件 r.Use(MyGlobalMiddleware()) // 定义路由组,并使用局部中间件 v1 := r.Group("/v1") { v1.Use(AddHeader()) v1.GET("/hello", Hello) } r.Run(":8080") } func MyGlobalMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // do something c.Next() // do something after } } func AddHeader() gin.HandlerFunc { return func(c *gin.Context) { c.Header("X-Request-Id", "123456") c.Next() } } func Hello(c *gin.Context) { headers := c.Request.Header requestId := headers.Get("X-Request-Id") c.JSON(200, gin.H{ "message": "hello", "request_id": requestId, }) }
MyGlobalMiddleware() を使用します。また、ローカル ミドルウェア
AddHeader() も使用します。これは、
/v1/hello ルートの前でのみ機能します。
Hello 関数では、
XX-Request-Id リクエスト ヘッダーの値を取得し、呼び出し元に返します。
r := gin.New() r.Use(gin.Logger())
r := gin.Default() r.Use(gin.Recovery())
r := gin.Default() r.Use(cors.Default())
以上がGinフレームワークのミドルウェアとその応用について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。