type HandlerFun func(http.ResponseWriter, *http.Request)
func (f HandlerFun) ServeHTTP(w http.ResponseWriter, r *http.Request) {
f(w, r)
}
func main() {
fun := HandlerFun(hellohandler)
fun.ServeHTTP(resq , res)
}
func hellohandler(w http.ResponseWriter, r *http.Request) {
}
请问一下这段代码是什么意思,我该从什么地方学到这个知识点呢?
fun :=HandlerFun(hellohandler)
这里它做了什么操作呢?或者说它解决了什么问题呢?谢谢各位了
第一个问题
type HandlerFun func(http.ResponseWriter, *http.Request) // 定义HandlerFunc类型
func (f HandlerFun) ServeHTTP(w http.ResponseWriter, r *http.Request) { // 定义HandlerFun的子函数ServeHTTP
f(w, r) // 调用函数handler,也就是调用hellohandler函数
}
func main() {
fun := HandlerFun(hellohandler) // 创建一个回调函数
fun.ServeHTTP(resq , res) // 传入http.ResponseWriter, *http.Request后进行调用ServeHTTP来进行回调。
}
func hellohandler(w http.ResponseWriter, r *http.Request) { // 回调函数
// 最终调用函数
}
意思大致是上面的意思吧,我也写了个测试。
package main
import (
"net/http"
"fmt"
)
type HandlerFun func(http.ResponseWriter, *http.Request)
func (f HandlerFun) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Println("b")
f(w, r) //
}
func main() {
var resq http.ResponseWriter = nil
var res *http.Request = nil
fun := HandlerFun(hellohandler)
fun.ServeHTTP(resq , res)
}
func hellohandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("a")
}
运行如下:
./main
b
a