gin源码剖析流程
2020-05-25 14:08:06 0 举报
gin源码剖析流程
作者其他创作
大纲/内容
engine.handleHTTPRequest(c)
r.Run(\":9090\")
engine.pool.Put(c)
监听9090端口
调用engine的ServeHTTP
root := engine.trees.get(method) if root == nil { root = new(node) root.fullPath = \"/\
从engine.trees中找到该路由对应的handers,将其赋值给context
engine.RouterGroup.Use(middleware...)
开始设置路由
c.index++\tfor c.index < int8(len(c.handlers)) {\t\tc.handlers[c.index](c)\t\tc.index++\t}
计算出绝对路径
c := engine.pool.Get().(*Context)
engine := New()
group.Handlers中存放的中间件,和处理该路由的函数合并。当该请求到来时,处理函数的合集会依次被调用
获得独立的context
r.GET(\"/ping\
main
将该路由填入engine.trees中。当请求到来时,从trees中查找该路由及其对应的处理函数,对这些处理函数,依次进行调用
遍历并执行context中的handles
srv.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)})
监听请求,如果有请求到来,则启动goroutine进行处理
r := gin.Default()
c.handlers = value.handlers
handlers = group.combineHandlers(handlers)
r.Render(c.Writer)
将server的request和response赋值给context
c.writermem.reset(w) c.Request = req c.reset()
absolutePath := group.calculateAbsolutePath(relativePath)
初始化Engine,没有重要操作
Engine
RouterGroup pool sync.Pool trees methodTrees
c.Next()
0 条评论
回复 删除
下一页