gpt4 book ai didi

go - http.Handle 和 http.HandleFunc 的区别?

转载 作者:IT老高 更新时间:2023-10-28 12:58:49 30 4
gpt4 key购买 nike

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

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

例如 file server标准包中的结构体包含文件服务的根目录并实现处理程序接口(interface)。

也就是说,对于简单的东西,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 }

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

关于go - http.Handle 和 http.HandleFunc 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21957455/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com