回答

收藏

http.Handle 和 http.HandleFunc 的区别?

技术问答 技术问答 228 人阅读 | 0 人回复 | 2023-09-12

Go 文档如下 http 包示例:
! q! g+ @0 z9 q# R
    http.Handle("/foo",fooHandler)http.HandleFunc("/bar",func(w http.ResponseWriter,r *http.Request)    fmt.Fprintf(w,"Hello,%q",html.EscapeString(r.URL.Path))})% @  [9 e0 W" d! R8 n
我在理解 Handle 和 HandleFunc 之间的区别以及为什么需要两个时间有点困难。有些人可以尝试用清晰的语言去新 Gopher 解释吗?
3 `# S. ^2 c  o0 b, b8 p1 v                                                                5 S; r1 I, y) s1 y. p' y
    解决方案:                                                                ; W8 {$ l7 E3 l& Q9 G2 D8 i  K
                                                                基本上,HTTP 服务器的多路复用器具有路径映射 -> 处理程序接口
5 I( i, y9 h7 }$ J- v# L: F4 ~, K我假设这里使用接口是为了允许您实现复杂的路径处理程序。" A5 }- E7 t  L
例如,标准包中的文件服务器是一含文件服务根目录和处理程序接口的结构。' B: a, {: ^+ c  ]5 ?5 U: b( I0 X9 }
也就是说,对于简单的事情,func 更容易、更清晰。所以他们添加了一个特殊的生成器,这样你就可以很容易地输入 func。
1 H9 G% T. y6 y- B看一看:server.go
* g9 R: J! E/ Q' h* k来自己:1216(截至今日)
( I8 F$ _6 U! N# b9 C9 S  R[code]  1216  type HandlerFunc func(ResponseWriter,*Request) 1217     1218 /ServeHTTP calls f(w,r).  1219  func (f HandlerFunc) ServeHTTP(w ResponseWriter,r *Request)        f(w,r) code]他们所做的就是只调用自己的自定义类型(刚好与界面相匹配)api界面在 匹配)上实现。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则