Я хочу знать, что здесь происходит.
Существует интерфейс для обработчика http:
type Handler interface {
ServeHTTP(*Conn, *Request)
}
Эта реализация, я думаю, я понимаю.
type Counter int
func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) {
fmt.Fprintf(c, "counter = %d\n", ctr);
ctr++;
}
По моему мнению, тип "Counter" реализует интерфейс, так как он имеет метод, который имеет требуемую подпись. Все идет нормально. Затем дается следующий пример:
func notFound(c *Conn, req *Request) {
c.SetHeader("Content-Type", "text/plain;", "charset=utf-8");
c.WriteHeader(StatusNotFound);
c.WriteString("404 page not found\n");
}
// Now we define a type to implement ServeHTTP:
type HandlerFunc func(*Conn, *Request)
func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) {
f(c, req) // the receiver a func; call it
}
// Convert function to attach method, implement the interface:
var Handle404 = HandlerFunc(notFound);
Может ли кто-нибудь выяснить, почему и как эти различные функции подходят друг другу?