KDOC 123: HandleFuncとは何か
この文書のステータス
- 作成
- 2024-03-15 貴島
- レビュー
- 2024-04-03 貴島
HandleFunc
Goでサーバを作るときによく登場する HandleFunc が何かを調べる。
↓HandleFuncは関数である。グローバル変数のDefaultServeMuxがあって、その変数にインスタンス化された構造体メソッドを呼び出している。これによって、われわれはServeMuxインスタンスを初期化せずに、パスと処理を紐付けられる。
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)
}
↓グローバル変数に登録されている。
// DefaultServeMux is the default ServeMux used by Serve.
var DefaultServeMux = &defaultServeMux
var defaultServeMux ServeMux
↓ServeMux型のメソッドの定義。内部ではServeMux型のHandleメソッドを呼びだす。Handleメソッドの引数では、引数のhandlerをHandlerFunc型に型変換している。当然だがシグネチャが同じなので、変換できる。こう書くことで関数呼び出しでは一般性を保ちつつ、内部ではHandlerFunc型のメソッドを使える、ということか。
func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
if handler == nil {
panic("http: nil handler")
}
mux.Handle(pattern, HandlerFunc(handler))
}
type HandlerFunc func(ResponseWriter, *Request)
関連
抽象。
- 既定の共有インスタンスを用意して、利用者が初期化を省けるようにする
- 同じ形の関数を型に変換し、外の受け口の一般性を保ちつつ内部でメソッドを使う
関連。
- 追加調査: 具体的にハンドラに処理を追加したときの例を示す
- 類似: KDOC 42: EbitenUIで動的に画像を書き換える。関数を登録しておき、あとで条件がそろったときに呼ばせる仕組みが共通する