http.Handle和http.HandleFunc的区别
http.Handle和http.HandleFunc的区别体现了Go语言接口的巧妙运用
下面两段代码功能都一样,都是启动了一个 http 服务器,监听 8080 端口,并注册路由。但是实现这两个路由注册的方法有点不同,一个使用 http.Handle
,另一个使用 http.HandleFunc
,下面来看看这两个之间的区别;
http.Handle分析
我们先看方法一中的http.Handle
函数
这个 Handler
类型是什么呢,其实它就是一个接口
,包含一个 ServeHttp()
的方法:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
在Go语言常规代码中,接口一般是这样用的
// Sayer 接口
type Sayer interface {
say()
}
type dog struct {
}
type cat struct {
}
// dog实现了Sayer接口
func (d dog) say() {
fmt.Println("汪汪汪")
}
// cat实现了Sayer接口
func (c cat) say() {
fmt.Println("喵喵喵")
}
先写一个接口,再写一个结构体,最后将结构体与方法相关联,也就是这个结构体类型dog实现了接口。
其实
type