登录
首页 >  Golang >  Go问答

http.Handle 和 http.HandleFunc 的区别?

来源:Golang技术栈

时间:2023-04-11 21:44:56 324浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《http.Handle 和 http.HandleFunc 的区别?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下golang,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

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”有一个路径映射 -> 处理程序接口

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

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

也就是说,对于简单的东西,func 更容易、更清晰。所以他们添加了一个特殊的生成器,这样你就可以轻松地传入一个函数。

看看: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 的区别?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>