私はこのユーティリティを持っています:
type Handler struct{}
func (h Handler) Mount(router *mux.Router, v PeopleInjection) {
router.HandleFunc("/api/v1/people", h.makeGetMany(v)).Methods("GET")
}
上記はこれを呼び出します:
func (h Handler) makeGetMany(v PeopleInjection) http.HandlerFunc {
type RespBody struct {}
type ReqBody struct {
Handle string
}
return tc.ExtractType(
tc.TypeList{ReqBody{},RespBody{}},
func(w http.ResponseWriter, r *http.Request) {
// ...
})
}
そして次tc.ExtractType
のようになります:
func ExtractType(s TypeList, h http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
h.ServeHTTP(w, r) // <<< h is just a func right? so where does ServeHTTP come from?
}
}
私の質問は - serveHTTP メソッド/関数はどこから来たのですか??
h
パラメータは、このシグネチャを持つ関数だけではありません:
func(w http.ResponseWriter, r *http.Request) { ... }
では、その関数にはどのように関数がServeHTTP
接続されているのでしょうか?
言い換えれば、なぜ私は電話しているのですか
h.ServeHTTP(w,r)
それ以外の
h(w,r)
?