当前位置: 首页 > 面试题库 >

功能实现界面

冉俊德
2023-03-14
问题内容

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

有一个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++;
}

根据我的理解,“计数器”类型实现了接口,因为它具有一种具有所需签名的方法。到目前为止,一切都很好。然后给出这个例子:

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);

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


问题答案:

这个:

type Handler interface {
    ServeHTTP(*Conn, *Request)
}

说任何满足Handler接口的类型都必须有一个ServeHTTP方法。以上将在包装内http

type Counter int

func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) {
    fmt.Fprintf(c, "counter = %d\n", ctr);
    ctr++;
}

这会将方法放在对应于ServeHTTP的Counter类型上。这是一个与以下示例分开的示例。

根据我的理解,“计数器”类型实现了接口,因为它具有一种具有所需签名的方法。

那就对了。

以下功能本身不能用作Handler

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");
}

这些东西的其余部分都适合上面的内容,因此它可以是一个Handler

在下面的代码中,a HandlerFunc是一个函数,它接受两个参数: 指向Conn_和的
_指针Request
,并且不返回任何内容。换句话说,任何接受这些参数且不返回任何值的函数都可以是HandlerFunc

// Now we define a type to implement ServeHTTP:
type HandlerFunc func(*Conn, *Request)

ServeHTTP是添加到类型的方法HandlerFunc

func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) {
    f(c, req) // the receiver's a func; call it
}

它所做的就是f用给定的参数调用函数本身()。

// Convert function to attach method, implement the interface:
var Handle404 = HandlerFunc(notFound);

在上面的代码中,通过在函数本身中人为地创建类型实例并将该函数制成实例的方法,最终使其对notFound接口可接受。现在可以与该接口一起使用。这基本上是一种技巧。Handler``ServeHTTP``Handle404``Handler



 类似资料:
  • 本文向大家介绍python wxpython 实现界面跳转功能,包括了python wxpython 实现界面跳转功能的使用技巧和注意事项,需要的朋友参考一下 用wxpython设计界面时可能会出现界面嵌套的情况 这样就需要进行界面的跳转 但是貌似wxpython没提供界面跳转的方式(也可能是我菜。。。) 所以就需要借助threading模块 主要思想: 注:该代码为源码的一部分,经过删减可能会导

  • Network(请求列表页面) Composer(构造请求) Log(日志平台) Rules(操作规则配置界面) Values(存放KeyValue的系统) Plugins(插件列表页面) WebSocket(WebSocket抓包功能) Filter(设置Network请求列表的过滤条件) Settings(设置对话框) Files(上传大块内容文件) Weinre(weinre列表) HTTP

  • 本文向大家介绍Android实现顶部底部双导航界面功能,包括了Android实现顶部底部双导航界面功能的使用技巧和注意事项,需要的朋友参考一下 最近想弄一个双导航功能,查看了许多资料,总算是实现了功能,这边就算是给自己几个笔记吧! 先来看看效果  那么就开始实现了! 底部导航栏我选择用FragmentTabHost+Fragment来实现,这个方法我觉得挺好用的,代码量也不多 首先是开始的acti

  • 我使用lambda函数中的functional方法实现了函数接口。所有的工作都很好,只是我遇到了一个错误,即必须实现这个继承的抽象方法(在我的例子中是函数方法)。现在我很困惑。我使用lambda函数实现了这个函数方法,为什么我要再次实现这个方法。函数方法的实现是如何正确完成的?我的代码: 谢谢你的帮助。:)

  • 问题内容: 当我看一看lambda表达式时,这本书涉及一个只有一种抽象方法的 功能接口 。我的问题针对该测验问题 我知道最后一个不是,但是我认为第一个和第二个应该是功能接口。但是书上说第二个不是。为什么?它不重写方法吗?因此,即使在第二秒,也不是只有一种抽象方法吗? 问题答案: 一种简单的查找方法是尝试定义一个实现的类。编译器会告诉您需要同时实现和。 您以为可以覆盖,这是可以理解的,但是它们实际上

  • 本文向大家介绍React实现todolist功能,包括了React实现todolist功能的使用技巧和注意事项,需要的朋友参考一下 一、index.js 二、TodoList 1、constructor 2、render 3、getTodoList 4、事件函数 5、网络请求 使用Charles代理网络,安装证书,设置端口,在手机上面打开网络WIFI,设置代理IP和端口,这样就能监听到手机访问的网