2019-01-02 gin.Default()跟进

蜗牛_3c49 · · 2870 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

调用debugPrintWARNINGDefault(),跟进

1

runtime.Version获取golang运行时版本号,getMinVer返回版本号尾数(例getMinVer("go1.7"),返回7),ginSupportMinGoVer常量是当前框架的支持最小版本号。

调用debugPrint(),跟进


1.1

os.Stderr是一个文件流,指向标准输出,该函数主要功能就是把传入的string写到标准输出里。

调用IsDebugging(),跟进

1.1.1

返回ginMode变量和debugCode常量的比较结果。

调用New(),跟进

2

初始化一个Engine结构体,并返回该结构体

调用debugPrintWARNINGNew(),跟进

2.1

向标准输出里打印一段话。

调用allocateContext(),跟进

2.2

返回结构体给Engine初始化。

调用engine.Use(Logger(), Recovery()),跟进

3

注释的意思是给engine附加中间件,附加到每个请求的执行链条中。

调用engine.RouterGroup.Use(middleware...),跟进

3.1

给engine.RouterGroup.Handlers添加处理函数。

调用engine.rebuild404Handlers(),跟进

3.2

调用处理并将返回值放入engine这个结构体字段allNoRoute中,依然是在初始化。

调用engine.combineHandlers(engine.noRoute),跟进

3.2.1

finalSize的值是engine.RouterGroup.Handlers处理函数的个数加上传入函数的个数,int(abortIndex)的值是63,如果finalSize大于等于63,就抛出异常信息"too many handlers",翻译过来为“太多的处理程序”,如果小于63,就直接把所有的函数全部返回出去。

调用engine.rebuild405Handlers(),跟进

3.3

返回值放入engine.allNoMethod中。

调用engine.combineHandlers(engine.noMethod),跟进

3.3.1

和engine.rebuild404Handlers()调用的是同一个子函数,只是传入的参数不一样。

完成解析。以下对该函数处理过程做一个总结:

1.先判断golang运行时的版本号是否小于gin框架指定的版本号,然后根据是否小于打印不同的提示信息到标准输出(windows下可以理解为控制台输出)。

2.然后直接打印一段提示信息:`[WARNING] Running in "debug" mode. Switch to "release" mode in production.

                                                        - using env:  export GIN_MODE=release

                                                        - using code: gin.SetMode(gin.ReleaseMode)

                                                        `。

3.然后初始化一个Engine对象。(由于该结构体较大,所以这里就不给出详细说明了,可以自己参阅gin源码。这里只贴出一张截图。)


4.然后往engine.RouterGroup.Handlers里面添加两个HandlerFunc函数对象,一个是打印日志的,一个是抛出错误的。

5.往engine.allNoRoute和engine.allNoMethod里面放入两个长度小于63的[]HandlerFunc实例,[]HandlerFunc里面的值是分别用engine.noRoute+engine.RouterGroup.Handlers,engine.noMethod+engine.RouterGroup.Handlers填充的。

6.返回engine结构体。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:蜗牛_3c49

查看原文:2019-01-02 gin.Default()跟进

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2870 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传