Go net/http包里有些没搞清楚~

func (mux *ServeMux) Handle(pattern string, handler Handler){}

上面是HTTP里面注册路由的方法,

func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
    mux.Handle(pattern, HandlerFunc(handler))
}

上面是调用注册之前的一个处理方法,关键在于函数体内的调用的方法接收的第二个参数HandlerFunc(handler)

type HandlerFunc func(ResponseWriter, *Request)

上面应该算是对指定方法的取一个类型别名叫做HandlerFunc

经过处理之后的handler怎么和Handler扯得上关系呢?Handler是一个interface啊?

有懂的人嘛?

阅读 4k
1 个回答

微信上面有人解答了。
因为HandlerFunc(handle),是将其包装成一个实现Handler接口的类型.
type HandlerFunc func(ResponseWriter, *Request)
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) { f(w, r) }

因为Handler使用了Handler接口的ServeHTTP方法,所以就自动实现了这个接口.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题