negroni包和mux包的一点理解
来源:互联网 发布:淘宝换货用申请退款吗 编辑:程序博客网 时间:2024/06/05 02:25
Negroni是一个http.Handle,因为他实现了
func (n *Negroni) ServeHTTP(rw http.ResponseWriter, r *http.Request) { n.middleware.ServeHTTP(NewResponseWriter(rw), r)}
所以Negroni可以作为http.listenAndServe的一个入口。
func (n *Negroni) Run(addr ...string) { l := log.New(os.Stdout, "[negroni] ", 0) finalAddr := detectAddress(addr...) l.Printf("listening on %s", finalAddr) l.Fatal(http.ListenAndServe(finalAddr, n))}
程序会在适当时候调用Negroni.ServeHTTP。
所有中间件,包括路由,都是一个被包装起来的http.Handle。
中间件的构成为:
type middleware struct { handler Handler next *middleware}
Negroni的构成为:
type Negroni struct { middleware middleware handlers []Handler}
可以看到,Negroni中包含有一个“首中间件”,和所有与中间件相关的Handler。middleWare很像链表的一个节,Negroni保存着首链节,然后依次访问所有中间件,(即依次调用中间件的Handler)。
这些中间件的Handler各有不同。
如"路由中间件"本身包含有一个Map数据结构,保存着路径以及对应的处理函数。"路由中间件"的Handler就是遍历这个Map,找到合适的处理函数进行处理。而如Log中间件,Recovery中间件等,则是具有处理Log和恢复相关的功能。
注意,http.Handler和Negroni.Handler不一样。
//Negroni.Handlertype Handler interface { ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc)}
//http.Handlertype Handler interface { ServeHTTP(ResponseWriter, *Request)}
阅读全文
0 0
- negroni包和mux包的一点理解
- Negroni和Gorilla/mux 解析 Golang
- 简单阅读golang的net/http包和Negroni的源码
- kubernetes源码之watch包mux.go阅读理解二
- vxworks下MUX接口的使用-发送全广播包
- JRE更新包导致的INIT FAILED (mux thread)
- Python的模块和包的理解
- javascript闭包的理解和实例
- 递归和闭包的理解
- 函数和循环闭包的理解
- 函数和循环闭包的理解
- 闭包的理解和使用
- 闭包的理解
- 闭包的理解
- 闭包的理解
- 闭包的理解
- 闭包的理解
- 闭包的理解
- 7-1 两个有序链表序列的合并
- C++ Primer知识系列四:内存模型和名称空间
- 《Hadoop基础教程》之初识Hadoop
- 类的声明要点
- vue的script和template用法一样
- negroni包和mux包的一点理解
- hh
- xadmin的安装(各种坑)
- bat 脚本
- Hive的复杂数据类型和时间类型
- 数据库学习8
- 神经网络--姿态识别论文综述备忘录
- Q-learning学习笔记
- 1.Two Sum题目和答案详解