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)