http.Handle和http.HandleFunc之间的区别?

Go文档的http包具有以下示例:

http.Handle("/foo", fooHandler)

http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {

fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))

})

我在理解Handle和HandleFunc之间的区别以及为什么需要两者之间的区别时遇到了一些困难。有人可以尝试用清晰的语言向新的Gopher解释吗?

回答:

基本上,HTTP服务器的“ mux”具有路径映射->处理程序接口

我假设在这里使用接口来允许您实现具有状态的复杂路径处理程序。

例如,标准包中的文件服务器是一个结构,其中包含文件服务的根目录并实现了处理程序接口。

也就是说,对于简单的东西,函子更容易,更清晰。因此,他们添加了特殊的生成器,因此您可以轻松地传递函数。

看看:server.go

从行:1216(截至今天)

  1216  type HandlerFunc func(ResponseWriter, *Request)

1217

1218 // ServeHTTP calls f(w, r).

1219 func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {

1220 f(w, r)

1221 }

他们正在做的是在自定义类型(恰好与接口的api匹配)上实现接口,该接口会自我调用。

以上是 http.Handle和http.HandleFunc之间的区别? 的全部内容, 来源链接: utcz.com/qa/419574.html

回到顶部