http.Handle 和 http.HandleFunc 的区别?
技术问答
228 人阅读
|
0 人回复
|
2023-09-12
|
Go 文档如下 http 包示例:
! q! g+ @0 z9 q# Rhttp.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界面在 匹配)上实现。 |
|
|
|
|
|