откуда берется метод ServeHTTP - PullRequest
0 голосов
/ 20 декабря 2018

Это смутило меня за последний месяц обучения. Go:

func Auth(next http.HandlerFunc) http.HandlerFunc {

    return func(w http.ResponseWriter, r *http.Request) {  // hmmmm

        // ...
        next.ServeHTTP(w, r)
    }
}

здесь мы видим, что функция Auth возвращает тип http.HandlerFunc.Этот тип просто функционал.Итак, когда вы вызываете next.ServeHTTP, когда и где этот метод определен?

1 Ответ

0 голосов
/ 20 декабря 2018

https://golang.org/src/net/http/server.go?s=59707:59754#L1950

// The HandlerFunc type is an adapter to allow the use of
// ordinary functions as HTTP handlers. If f is a function
// with the appropriate signature, HandlerFunc(f) is a
// Handler that calls f.
type HandlerFunc func(ResponseWriter, *Request)

// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
    f(w, r)
}

Буквально любая функция с подписью func(ResponseWriter, *Request) может быть приведена к HandlerFunc, что дает ей метод ServeHTTP - который затемпросто вызывает функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...