中间件原理
中间件(middleware),其原理就是对一个方法进行包裹装饰,然后返回同类型的方法,在Python中又名装饰器,甚至成为了Python的语法糖。
应用场景大多是需要对某一类函数进行通用的前置或者后置处理。
**
最常见的就是在web开发中,执行相应请求的handler函数前,需要对token合法性进行校验,在handler执行完后需要对处理结果产生的err进行记录和上报,这些都是通用的逻辑,并不需要在每个handler中都编写一遍。
实现一个最简单也最经典的中间件例子,计算函数的执行时间、记录日志。
func Hi(writer http.ResponseWriter, request *http.Request){
time.Sleep(time.Second*1)
rsp:=map[string]interface{
}{
"errcode":0,"msg":"hi"}
rspByte,_:=json.Marshal(rsp)
writer.Write(rspByte)
}
//中间件
func TimeUse(next http.HandlerFunc)http.HandlerFunc{
return func(writer http.ResponseWriter, request *http.Request) {
start:=time.Now()
next(writer,request)
fmt.Printf("cost %f second",time.Since(start).Seconds())
}
}
func Log(next http.HandlerFunc)http.HandlerFunc{
return func(writer http.ResponseWriter, request *http.Request) {
next(writer,request)
log.Println("run success")
}
}
func main() {
mx:=http.NewServeMux()
mx.HandleFunc(