1クール続けるブログ読者になる1クール続けるブログとりあえず1クール続けるソフトウェアエンジニアの備忘録この広告は、90日以上更新していないブログに表示しています。好んで使うのですが、ふんわりとした理解でMiddlewareを宣言していました。Middlewareという名称も個人的にはあんまり腑に落ちていなくて、最近少し気になって調べたところ、「ロギングや認証などの横断的な関心事を処理するデザインパターン」を指すようです。NodeJSやRailsでもMiddlewareと呼称するようで、Javaサーブレットではフィルタ、C#ではデリゲートハンドラーと呼ばれているそう(後者2つには馴染みがある)。このへんでしっかりGoでのMiddlewareの実装を確認しておこうと思いました。最近Goを使っていなかったので、コードリーディングしがてらリハビリをばという気持ちもあります。参考文献eli.thegreenplace.netgithub.comGoのHTTPサーバの処理の流れまずGoでHTTPサーバを公開するときはどのようなコードになるでしょうか。下記はGoDocのサンプルコードから拝借したコードです。シンプルな実装だとこのようになると思います。いう関数から見ていきます。処理の一部を省略したり、改変することで見通しを良くしています。関数の呼び出しに関してもインライン展開している箇所があります。*Request)というメソッドを呼んでいます。このメソッドでユーザで定義したコードが実行されるようになっています。いうhandlerが利用されることになります。interfaceを実装しています。どこで触ったのか?」という疑問が浮かびます。注目してみたいと思います。略で、複数の入力を受け取り、それらを選択したりまとめたりして一つを出力する装置のことだそうです。コードコメントでも、ServeMuxは、httpリクエストのマルチプレクサで、受け取ったリクエストを照合し処理を呼び出すとあります。Handlerを登録する仕組みになっています。いうinterfaceを実装する型になります。いうメソッドを持ちます。最後にどのようにHandlerが呼び出されているかを確認してみます。関数と一緒に引数に渡したpatternにmatchするかどうかを見て、ユーザの処理コードを実行しています。r)}Middlewareの実装についてGoにおけるMiddlewareは別のHandlerをwrapするHandlerです。呼び出されるように登録されていて、呼び出されると前処理を行い、その後にWrapしているHandlerを呼び出します。Middlewareです。Handlerのinterfaceを実装していて、Pathパターンを見て正しいユーザコードのHandlerを呼び出す前処理を行っていました。ロギングのMiddlewareはどのように実装されているか見ていこうと思います。利用したシンプルなサーバ実装例は下記です。いうHandlerを実装した構造体を渡しています。呼ばれることになります。見ていきたいと思います。前セクションと同じく、見通しを良くするために省略している箇所があります。あることに注意してください。関数を見ていただければ分かりますが、ロギング処理と引数で渡したhandlerを実行する関数を返しています。呼び出されたタイミングで、登録した順にMiddlewareがchainして最後にユーザコードが呼び出されるようなHandlerを生成しています。確認してみたいと思います。厳密ではないかもしれませんが、イメージとしては下記です。Middlewareに関しては、自前で実装することも多いようで、昔の書籍にはなりますが「Go言語によるWebアプリケーション開発」というオライリーから出ている書籍で自分も写経した記憶があります。コードリーディングしてまとめるのは疲れますが、自分のためになりますね。3はてなブログをはじめよう!jrywm121さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。