为了账号安全,请及时绑定邮箱和手机立即绑定

功能实现界面

功能实现界面

Go
一只斗牛犬 2021-04-02 10:11:45
我想知道这里发生了什么。有一个http处理程序的接口:type Handler interface {    ServeHTTP(*Conn, *Request)}我想我了解这种实现。type Counter intfunc (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);有人可以详细说明为什么这些功能或如何将它们组合在一起吗?
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

您对下半部分到底了解什么?这与上面的模式相同。他们没有定义Counter类型为int,而是定义了一个称为notFound的函数。然后,他们创建一种称为HandlerFunc的函数类型,该函数带有两个参数,即连接和请求。然后,他们创建一个称为ServeHTTP的新方法,该方法绑定到HandlerFunc类型。Handle404只是使用notFound函数的此类的一个实例。


查看完整回答
反对 回复 2021-04-26
  • 2 回答
  • 0 关注
  • 243 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信