net/http包中handle().handlefunc()是什么区别?

keke · 2013-03-31 07:26:42 · 11679 次点击

还不是很明白,handle()怎么用,能否给个例子?实现handlefun("/hello",hello)的功能

#2
更多评论
polaris
社区,需要你我一同完善!

Handler是一个接口。

而HandleFunc和Handle都是调用DefaultServeMux对应的方法,而DefaultServeMux是ServeMux的实例,ServeMux实现了Handler接口。事实上,HandleFunc最终还是会调用Handle方法。代码如下:

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

明白了吧?

大部分时候用HandleFunc()即可,方便(因为接收func函数);而如果想自己实现Handler接口,则可以使用Handle()

#1
polaris
社区,需要你我一同完善!

比如 本站对于静态资源的处理方式:

http.Handle("/static/", http.FileServer(http.Dir(ROOT)))

这里的http.FileServer就返回一个Handler实例,net/http包中类似的还有

func NotFoundHandler() Handler
func RedirectHandler(url string, code int) Handler
func StripPrefix(prefix string, h Handler) Handler
func TimeoutHandler(h Handler, dt time.Duration, msg string) Handler
#3