Как работает интерфейс http.Handler
Начал разбираться с middlewares и появился вопрос.
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
mux := http.NewServeMux()//здесь у mux нет явного метода
//ServeHTTP(ResponseWriter, *Request)
mux.HandleFunc("/test", test)
mdlwr := MdlWr(mux) //однако здесь не ругается что объект mux не реализует интерфейс.
http.ListenAndServe(":8181", mdlwr)
}
//функция принимает объект интерфейсного типа Handler
//и чтобы удовлетворить интерфейсу Handler, объект должен
//обладать методом `ServeHTTP(ResponseWriter, *Request)`
//но в main объект mux, который помещаю в Mdlwr
//не имеет такого метода явно. А как Mdlwr тогда работает?
func MdlWr(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println(r.RequestURI)
h.ServeHTTP(w, r)
})
}
func test(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "ok")
}
Вопрос в комментах к коду Спасибо за ваше время, внимание и, в идеале, ответ.