概要
Goでrouterを作ったときにHTTPサーバーのコードの内部を読んだので、その時のメモ。
HTTPサーバーのコードリーディング
基本形
Goに入門したとによく見るであろう形のコード。
色々なものが省略されてこの形になっている。
省略しないで丁寧に書いた形
先程の基本形を省略しないで書いた形。 どのような実装を経て基本形になるのか1つずつ確認していく。
Handlerの置き換え
まずは、Handlerの置き換え。
ServeHTTPは関数型のaliasであるHandlerFuncに置き換えることができる。
cf.
DefaultServeMuxの利用
muxをDefaultServeMuxで代用。
DefaultServeMuxはServeMux型の構造体を持っている。
HandlerFuncというmuxにルーティングを登録する関数を実装している。
cf.
- DefaultServeMux
- func (mux *ServeMux) HandlerFunc(pattern string, handler func(ResponseWriter, *Request))
ListenAndServe()の利用
Server構造体(http.Server{})を作らずとも、ListenAndServe()を代用することができる。
cf.
これで最初の基本形に到達。
まとめ
APIサーバー作るときとか普段余り意識しないと思うが、知っておくと何か拡張したいときに役に立つ、はず。
routerを作るときはhttp.Handlerのインターフェースを意識してmuxを作って上げれば良い。