開催後記

secondarykey 2019/11/30 07:34

お越しいただき、ありがとうございました!

先日(11/23)のShizuoka.goが開催されました。 お越しいただいた皆さんありがとうございました。

発表者のみなさんもありがとうございました。発表者の方がいらっしゃると非常に助かります。 なんとHDMIケーブルが断線するというトラブルに見舞われましたが、なんとかなってよかった。

クラウド周りでは、今まで比較的GCPだったのに、最近はAWSの発表が続いているので、 Azure辺りの話もあると面白いですね。

少しだけ自分の発表に少し書いたHTTPアクセス時の前処理等を行うMiddlewareの詳細を書いていきたいと思います。

Middlewareについて

最後の方にhttp.LlistenAndServe()の第2引数のHandleについて話しました。 そこでオマケとして書いたMiddlewareの話です。

先日10周年を記念して開いたサイトであるgo.devの

に簡単なものが書いてあります。 これは読めばわかると思いますが、HandleFuncで登録する時にhttp.HandlerFuncを引数に持ち、http.HandlerFuncを返す関数logging()を呼んでいます。

このパターンだと登録時に少し面倒くさい気もしていました。これだけならHandleを登録して、その処理でログを出力すればよいように見えます。

ということでadvanceになります。

簡単なものはHandleでいけるのですが、 それぞれのパーツを順序とか色々考えて作るとこのパターンがいいのかなぁと思うようになってきました。 ※確実なものはHandleでやって、こっちで細かいのみたいな感じになるのかな?

type Middleware func(http.HandlerFunc) http.HandlerFunc

Middlewareはinterfaceで定義しておいて、 実行したいhttp.HandlerFuncの後ろに実行したいMiddlewareを書いていく感じですね。 ページのサンプルに対してdeferを書き、それぞれのトレースを残したコードをplaygroundに書いてみました。

Chainの戻り値を呼び出しています。 通常はサンプル通り、http.HandleFunc()で登録し、サーバでリクエストが来たら動作する感じです。

このコードを実行して見たらわかりますが、Chain()の最後にある引数から開始し、目的の関数まで実行されます。 deferはその逆に実行していくわけです。deferが強烈ですね。

次回開催について

一応2020年3月を予定しております。 その前の2月に1.14のパーティをやると思います。おっさん一人で飲んでますのでお暇なら慰めに来てください。

Gopherについて

このGopherは

より持ってきました。

vertical_align_top