net/http 包提供了一组快捷的注册路由的函数 http.Handle() 、 http.HandleFunc() 来配置 http.DefaultServeMux , 快捷函数会将处理器注册到 http.DefaultServeMux。
二者之间的区别在于 handler 参数上
http.Handle() 的 handler 是一个 http.Handler 接口实例,也就是说传入的 handler 必须要自己提前实现 http.Handler 接口的 ServerHTTP(ResponseWriter, *Request) 方法 。
例如:将处理器放入闭包中,将参数传入处理器 。
http.HandleFunc() 的 handler 直接是一个原型为 func(ResponseWriter, *Request) 的函数,深入追踪会 HandleFunc() 会发现一个自定义的函数类型 。
因此任何具有 func(ResponseWriter, *Request) 签名的函数都能转换成为一个 http.HandlerFunc 类型的对象 。同时自定义的函数类型中已经实现了 ServeHTTP() 方法,因此它也是一个 http.Handler。
例如:返回时使用一个到 http.HandlerFunc 类型的隐式转换
net/http 包提供了 http.NewServeMux() 来创建一个自定义的 http.ServeMux 实例
例如:调用 http.NewServeMux() 会创建服务复用器
例如:创建静态服务
Go中没有继承、多态,可通过接口来实现 。而接口则是定义声明的函数签名,任何结构体只要实现与接口函数签名相同的方法 , 即等同于实现了对应的接口 。
例如: http.HandleFunc() 处理函数实现实际上调用默认 http.DefaultServeMux 的 HandleFunc() 方法
例如:调用 http.Handle() 方法则第二个参数 handle 必须实现 http.Handler 接口的 ServeHTTP() 方法,也就是说只要具有 ServeHTTP() 签名方法即可作为处理器 。
例如:自定义处理器
http.HandlerFunc 自身已实现 http.Handler 接口的 ServeHTTP() 方法,因此它也是一个处理器 。
http.HandlerFunc 的作用是将自定义函数转换为 http.Handler 处理器类型,当调用 http.HandlerFunc(fn) 后会强制将 fn 函数类型转换为 http.HandlerFunc 类型,这样 fn 函数就具有了 ServeHTTP() 方法,同时也就转换成为了一个 http.Handler 处理器 。因此 http.HandlerFunc 又称为适配器 。
关于go语言响应http请求和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 开放式射击类单机游戏手游,开放的射击游戏
- 有的电脑硬盘太小怎么办,电脑硬盘小有什么影响
- 虹口餐饮业代理记账平台,虹口区代理记账
- 直播运营快递,直播间快递什么意思
- phpjson数据压缩 php压缩包
- 电脑硬盘坏了怎么保修,电脑硬盘坏了需要多少钱修
- 好玩的小型射击游戏,小型射击游戏排行榜
- 我的世界服务器移动受限,我的世界服务器不能移动
- 呼吸灯延时函数c语言 呼吸灯c语言程序