[Golang]意外に面白いGinのカスタムミドルウェア作成

こんにちは。KOUKIです。

とある企業でWebプログラマーとして働いています。

Go言語で開発しており、そのフレームワークであるGinに触る機会が多いです。

本記事では、Ginのカスタムミドルウェアの作成方法について紹介します。

事前準備

開発に必要なファイルを用意します。

作成したmain.goファイルに、以下のWebサーバーコードを実装します。

「go run main.go」にてWebサーバーを立ち上げ、「localhost:8080/ping」へブラウザからアクセスすると、以下のログ出力が確認できると思います。

カスタムミドルウェアの実装方法

ソフトウェアの世界では、ミドルウェアは様々な意味を持ちます。

しかし、この記事では、HTTPのリクエストの受信からハンドラーが実行結果をリクエストに乗せて返すまでの中間(ミドル)で任意の処理をするものと定義します。

Ginでは、カスタムミドルウェアを簡単に実装することができます。

gin.HandlerFuncを戻り値に持つMyCustomLoggerを定義しました。これをmain関数内で読み込みます。

ミドルウェアを読み込む方法方は、大きく分けて2つあります。

方法1は、Ginにデフォルトで組み込まれているミドルウェアに相乗りする形でカスタムミドルウェアを有効にします

一方、方法2は、ミドルウェアの実行をカスタムミドルウェアのみに限定したい場合に用います

Webサーバーを立ち上げ直して、「http://localhost:8080/ping」にアクセスしてみましょう。

ログの出力結果からカスタムミドルウェアが有効になっていることがわかりますね。

しかも、便利なことにc.Next()」を使うと実行する処理を切り替えることができます。今回の場合は、MyCustomLoggerがStartログを出力した後、pingハンドラーに処理を切り替え、その後、再びMyCustomLoggerに戻りEndログを出力しました。

カスタムミドルウェアの値の受け渡し

カスタムミドルウェアは、ginのコンテキスト(*gin.Context)を持っているので、値の受け渡しが可能です。

上記では、データをセットするために「c.Set(“v”, 123)」、データを取得するために「c.Get(“v”)」を使っています。この値は、Key-Valueのペアで格納されます。

先ほどと同じ要領で、動作確認をしましょう。

「123 true」と取得できましたね。Getメソッドは、セットした値と取得結果を返してくれます。

カスタムミドルウェアの実行順番

最後に、カスタムミドルウェアの実行順番を確認してみましょう。

実験のため、もう一つカスタムミドルウェアを用意します。

MyCustomMiddleWare関数を作成し、main関数で読み込みました。

このプログラムを実行すると、以下の結果を受け取れました。

MyCustomMiddleware —-Next()—->MyCustomLogger —-Next()—->Ping Handler—> MyCustomLogger —> MyCustomMiddlewareの順番でデータが流れていますね。

どうやらミドルウェアは、適用した順番で実行されるようですね。

おわりに

個人的にカスタムミドルウェアの作成は意外に面白いと思いましたが、いかがでしたでしょうか。

カスタムミドルウェアを上手に使うと、必ず実行したい前処理、後処理がかけて便利ですよね。

アプリケーション開発に幅を持たせてくれそうです^^

それでは、また!

Go記事まとめ

コメントを残す