Типирование функции Go

Меня смущает этот фрагмент кода из пакета 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 . Теперь я действительно не понимаю, как это работает.

Если у меня более одного метода для типа, как мне узнать, какой из них будет присоединен к новому экземпляру и с каким именем или порядком?

5
задан thwd 31 December 2011 в 22:31
поделиться