当前位置: 首页 > news >正文

在线教育网站怎样建设精通网站建设

在线教育网站怎样建设,精通网站建设,长沙网站建设大全,软件技术是什么专业go web框架 gin-gonic源码解读01————Engine gin-gonic是go语言开发的轻量级web框架#xff0c;性能优异#xff0c;代码简洁#xff0c;功能强大。有很多值得学习的地方,最近准备把这段时间学习gin的知识点#xff0c;通过engine#xff0c;context#xff0c;router…go web框架 gin-gonic源码解读01————Engine gin-gonic是go语言开发的轻量级web框架性能优异代码简洁功能强大。有很多值得学习的地方,最近准备把这段时间学习gin的知识点通过enginecontextroutermiddleware几篇博客文章总结总结。 而Engine是gin框架最核心的结构体。 // Engine is the frameworks instance, it contains the muxer, middleware and configuration settings. // Create an instance of Engine, by using New() or Default() type Engine struct { // ... 略 }为什么gin需要设计一个Engine结构体 因为gin框架依赖于go本身的 net/http 包来提供http服务。 net/http 包的http服务可以用以下方式快速的启动 type mHandle struct { }func (i mHandle ) ServeHTTP(w http.ResponseWriter, req *http.Request) {w.Write([]byte(Hello)) }func HttpRun() {// mHandle{} 实现了 net/http中的Handler接口http.Handle(/, mHandle{})http.ListenAndServe(:9999, nil) } // net/http中的Handler接口 // type Handler interface { // ServeHTTP(ResponseWriter, *Request) // }而我们gin框架的Engine也实现了一个net/http包的Handler接口。当是gin既然是依赖老的net/http为什么大家不直接使用net/http而是需要使用gin呢那是因为net/http在大多数情况下只支持静态路由而且不能很好的支持动态路由对中间件的开发也不友好也不能很好的支持http模版的返回所以大多数时候我们更倾向于使用集成了这些功能的gin,并且gin的代码量很少简直是小而美。 type Engine struct {// ... 略// 对象池这里用于存放gin.Context对象减少内存分配降低 GC 压力。pool sync.Pool// 路由树trees methodTrees }// ServeHTTP conforms to the http.Handler interface. func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) {// Context是gin框架为了更方便的处理http的请求与响应(即w http.ResponseWriter, req *http.Request)// 而对进行的封装每次接受到http请求都需要封装一下Context结构体交由下一步代码执行Context在后续的博客中会有详细的介绍c : engine.pool.Get().(*Context)c.writermem.reset(w)c.Request reqc.reset()// 将请求交于逻辑函数执行engine.handleHTTPRequest(c)// 执行完了进行归还engine.pool.Put(c) }// 逻辑函数这里来解析请求的url然后路由匹配该路径需要执行的方法 func (engine *Engine) handleHTTPRequest(c *Context) {// 获取请求方法GETPOST..httpMethod : c.Request.Method// 获取urlrPath : c.Request.URL.Pathunescape : false// 如果地址存在原始地址则使用原始地址if engine.UseRawPath len(c.Request.URL.RawPath) 0 {rPath c.Request.URL.RawPathunescape engine.UnescapePathValues}if engine.RemoveExtraSlash {// cleaenpPath 函数作用类似于filepath.Clean()是为了获取最短有效urlrPath cleanPath(rPath)}// Find root of the tree for the given HTTP method// engine.trees中存放是gin框架的路由树它采用前缀树结构来搞笑的存储各类路由 // 后续的博客会对路由树有更为详细的介绍这里就简单介绍一下。t : engine.treesfor i, tl : 0, len(t); i tl; i {// 路由树的第一层孩子节点都是请求方法如GETPOST。。。if t[i].method ! httpMethod {continue}root : t[i].root// Find route in tree// 查找请求的url是否有对应的url路由配置value : root.getValue(rPath, c.params, c.skippedNodes, unescape)if value.params ! nil {c.Params *value.params}// value.handlers存储的就是该路由的逻辑处理方法if value.handlers ! nil {c.handlers value.handlersc.fullPath value.fullPath// c.Next是gin框架调用handlers与各类中间件的一种便捷的方式后续讲中间件的时候会重点介绍。c.Next()// 处理完了写入响应的头文件c.writermem.WriteHeaderNow()return}// 执行到这里了说明value.handlers nil这里判断是不是重定向请求然后进行重定向处理if httpMethod ! http.MethodConnect rPath ! / {if value.tsr engine.RedirectTrailingSlash {redirectTrailingSlash(c)return}// 实在找不到就尝试修复你的url看看能不能找到合适的路由来处理if engine.RedirectFixedPath redirectFixedPath(c, root, engine.RedirectFixedPath) {return}}break}// HandleMethodNotAllowed 这个配置如果开启并且没有找到合适的路由来处理该请求就会尝试别的method 会不会有可以解析该请求的路由if engine.HandleMethodNotAllowed {for _, tree : range engine.trees {// 相同method的上面已经找过了这里continueif tree.method httpMethod {continue}// 到别的请求方法下面嚯嚯if value : tree.root.getValue(rPath, nil, c.skippedNodes, unescape); value.handlers ! nil {c.handlers engine.allNoMethodserveError(c, http.StatusMethodNotAllowed, default405Body)return}}}// 啥招都没有了调用统一的失败处理函数响应该请求c.handlers engine.allNoRouteserveError(c, http.StatusNotFound, default404Body) }
http://www.hkea.cn/news/14258055/

相关文章:

  • 网站设计注册托管公司是怎么托管的
  • 展厅设计图效果图大全济南seo网络优化公司
  • 网站建设禁止谷歌收录的办法学网络工程好找工作吗
  • 中英文网站多少钱电子商务网站有那些功能
  • 淘宝返利网站怎么做的如何建设公司网站 需要注意什么
  • 国外html5网站源码flash属于网页制作平台吗
  • 有哪些企业网站平台一个完整网页的制作案例
  • 博客网站建设上海网络科技有限公司排名
  • 智慧团建网站入口官网湖南省建设厅李云
  • 文山城乡建设部网站首页wordpress不能自定义
  • sjz住房建设局网站wordpress清理
  • 网站建设遇到哪些攻击医院网站建设预算表
  • 个人备案网站放视频微信公众号网址
  • 为什么要在南极建站青岛北方现货交易平台代理
  • 国外的建筑设计网站简洁的网站建设合同
  • 做阿里网站需要的faq定制开发 商城网站 最快
  • 高端建站属于外包公司么上海网页制作服务商
  • 广西城乡建设部网站首页网站建设业动态
  • 许昌知名网站建设价格广州汽车网站建设
  • 新网站内部优化怎么做wordpress 头部 微博
  • 国外学校网站设计星宿网站建设
  • 男的和女的做那种短视频网站用电脑怎么做原创视频网站
  • 志愿服务网站开发网站建设与实践高自考
  • 建设银行江西分行官方网站南京seo公司
  • 重庆seo网站排名优化做网站保存什么格式最好
  • 网站建设分金手指排名十四网站建设 300元
  • 网站建设的运用场景连云港市住房和城乡建设局网站
  • 网站怎么做好建设施工合同备案在哪个网站
  • 广西优化网站外贸网站建设费用情况
  • 爱网站关键词查询菏泽市建设信息网