功能实现界面

我想知道这里发生了什么。


有一个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's a func; call it

}

// Convert function to attach method, implement the interface:

var Handle404 = HandlerFunc(notFound);

有人可以详细说明为什么这些功能或如何将它们组合在一起吗?


一只斗牛犬
浏览 246回答 2
2回答

潇湘沐

您对下半部分到底了解什么?这与上面的模式相同。他们没有定义Counter类型为int,而是定义了一个称为notFound的函数。然后,他们创建一种称为HandlerFunc的函数类型,该函数带有两个参数,即连接和请求。然后,他们创建一个称为ServeHTTP的新方法,该方法绑定到HandlerFunc类型。Handle404只是使用notFound函数的此类的一个实例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go