negroni包和mux包的一点理解
codegangsta/negroni包和gorilla/mux包的一点理解
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.Handler type Handler interface { ServeHTTP(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) }
//http.Handler type Handler interface { ServeHTTP(ResponseWriter, *Request) }
negroni包和mux包的一点理解相关推荐
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- 你真的理解粘包与半包吗?3分钟搞懂它
通俗的例子 这里先举个可能不太恰当,但是很容易理解的例子. 比如,平时我们要寄快递,如果东西太大的话,那么就需要拆成几个包裹来邮寄. 收件人仅收到个别包裹的时候,东西是不完整的,对应到网络传输中,这种 ...
- R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解、使用gtExtras包添加一个图,显示表中某一列中的数字
R语言使用gt包和gtExtras包优雅地.漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解.使用gtExtras包添加一个图,显示表中某一列中的数字 目录
- R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解、使用gtExtras包添加一个图,显示表中某一列中的数字、并为类型数据添加图像符号标签
R语言使用gt包和gtExtras包优雅地.漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解.使用gtExtras包添加一个图,显示表中某一列中的数字.并为类型数据添加图像符号标签 目 ...
- 解析ip数据包java_ip包,ip数据包,数据包或者包的理解
首先看看以下这段话: 路由器把需到达的网络的网络号保存在路由表中,当一个IP数据报被路由器接收到时,路由器先从该IP数据报中取出目的站点的IP地址,根据IP地址计算出目的站点所在网络的网络号,然后用网 ...
- ZYNQ开发系列——hw_platform包和BSP包中的一些理解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--hw_platform包和BSP包中的一些理解 前言 hw_platform BSP包 前言 前面我们完成了PS输 ...
- java 解析ip数据包_ip包,ip数据包,数据包或者包的理解
首先看看以下这段话: 路由器把需到达的网络的网络号保存在路由表中,当一个IP数据报被路由器接收到时,路由器先从该IP数据报中取出目的站点的IP地址,根据IP地址计算出目的站点所在网络的网络号,然后用网 ...
- IDEA中打jar包和war包以及jar包和war包的区别及理解
首先我们先理解一下什么是jar包和war包! jar包:jar是类的归档文件! JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件,为 J ...
- Java项目 常用包的命名及理解【dao包、domain包、service包、utils包、web包、impl包】
JavaWeb 黑马旅游网 项目结构: 目录 1.dao包 2.domain包 3.service包 4.utils包 5.web包 6.impl包 1.dao包 Dao:数据库相关操作 ...
最新文章
- linux环境调用gsoap,Linux下gSOAP的使用 (c++)
- 三线表是什么?R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、通过topclass参数自定义三线表表格的显示形式(显示为类似斑马线、并将所有列居中,包括包含行标签的第一列)
- log4j2的xml的配置样例
- php文章远程图片,php保存远程图片到本地 php正则匹配文章中的远程图片地址
- 关于JAVA编译时找不到自定义包的问题
- 华为ap配置_Win10频发蓝屏,深度Deepin系统,调试华为AC和AP
- 【郭林专刊】JSP中JSTL提供的函数标签EL表达式操作字符串的方法
- 每日程序C语言9-判断分数段
- linux python安装教程_Linux系统如何安装Python?新手教程
- 新客户上云 –虚拟机及相关服务常见问题集锦
- 计算机学院吉祥物意见征集,“我的学校我做主 ——吉祥物征集”启事
- [转]:理解 Linux 配置文件
- 第五话 Asp.Net MVC 3.0【MVC实战项目の一】
- system什么意思c语言,system是什么意思?
- 慧都科技邀您品鉴“2021重庆高效加工与智能化升级峰会”
- android设备刷机精灵,使用刷机精灵给安卓手机刷机教程
- 小强学渲染之OpenGL的GPU管线
- 3.100个渗透测试实战#3(Lampiao)
- 最值得收藏的电脑使用习惯, 让你使用电脑的效率轻松提升数倍(持续更新中)
- 电脑右键“打开方式”不见了怎样恢复
热门文章
- Hadoop的java程序报错Exception in thread main java.io.FileNotFoundException: File does not exis
- 中国(吉林)首批援萨摩亚医疗队凯旋
- 世界之最VS谁是世界上最无聊的人
- 如何打开SQL server的MDF/LDF文件并修改数据
- APK获取包名的办法
- CSGO控制台与常用指令
- 全国计算机考试能带手机吗,全国计算机等级考试注意事项
- matlab中ode45用法,ode45(ode45用法举例)
- autocad2022版安装提示提示“The feature you are trying to use is on a network resource ...”失败解决办法
- 挤掉“酸柠檬”,内容创作市场迎来质量革命