GolangのHTTPサーバーのコードリーディング

概要

Goでrouterを作ったときにHTTPサーバーのコードの内部を読んだので、その時のメモ。

github.com - bmf-san/goblin

HTTPサーバーのコードリーディング

基本形

Goに入門したとによく見るであろう形のコード。

色々なものが省略されてこの形になっている。

省略しないで丁寧に書いた形

先程の基本形を省略しないで書いた形。 どのような実装を経て基本形になるのか1つずつ確認していく。

Handlerの置き換え

まずは、Handlerの置き換え。

ServeHTTPは関数型のaliasであるHandlerFuncに置き換えることができる。

cf.

DefaultServeMuxの利用

muxをDefaultServeMuxで代用。

DefaultServeMuxはServeMux型の構造体を持っている。

HandlerFuncというmuxにルーティングを登録する関数を実装している。

cf.

ListenAndServe()の利用

Server構造体(http.Server{})を作らずとも、ListenAndServe()を代用することができる。

cf.

これで最初の基本形に到達。

まとめ

APIサーバー作るときとか普段余り意識しないと思うが、知っておくと何か拡張したいときに役に立つ、はず。

routerを作るときはhttp.Handlerのインターフェースを意識してmuxを作って上げれば良い。

元ネタ

GoでRouter自作実装寄りな話