Меня смущает этот фрагмент кода из пакета HTTP :
type HandlerFunc func(ResponseWriter, *Request)
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
f(w, r)
}
Почему метод ServeHTTP
имеет ту же сигнатуру, что и это тип - в чем смысл?
Тестируя, я обнаружил, что если я передаю случайную функцию ( foo
) в HandlerFunc
:
var bar = HandlerFunc(foo)
bar
становится экземпляром HandlerFunc
с foo
в качестве метода ServeHTTP
. Теперь я действительно не понимаю, как это работает.
Если у меня более одного метода для типа, как мне узнать, какой из них будет присоединен к новому экземпляру и с каким именем или порядком?