深刻理解gin framework(一)

gin框架

  • 众多的golang web框架中,gin是一个比较轻量级的框架,不像beego那样,还有orm模块。接口设计,运行速度方面,gin都算是比较让人满意的。

web框架的顶层设计

  • 每一个语言都有本身框架的特色,golang的话,由于有官方的标准库,标准库的质量是比较可靠的,因此绝大多数框架都是基于标准库,面向实际应用场景,将底层的细节进一步地抽象,达到减小开发时间,提高代码质量的目的。
  • 因此,在顶层分析框架设计的时候,须要明确如今web框架主要的功能,以及golang标准包提供了什么工具。
  • 需求:RESTful接口。目前主流的后端设计都是围绕接口展开的,而目前主流的接口设计范式就是RESTful。也就是说,框架的设计目标应该知足如下几点:git

    1. 便捷的路由分组
    2. 快速调用http方法 get,post,delete,put,patch,head,options等进行资源管理
    3. 良好的并发性能
    4. 解析URL参数或request body便捷
    5. 须要对JSON有良好的支持
  • golang的http标准包有哪些组件,组件之间的关联又是如何?http标准包是开发web框架必不可少的原材料:github

    1. 在http包的源码中,有几个重要的部件:其中struct 有 Server,Conn。interface有Handler。分别对应服务器对象,connection对象,以及路由器。
    2. http标准包的编程逻辑:须要实现Handler接口的ServeHTTP方法,至关于新建一个路由规则,当server启动,创建http链接以后,就能够按照定义的路由规则进行处理了。

gin是如何整合http包的

  1. 定义一个engine,实现ServeHTTP方法,这时,就能够将engine 做为Handler传给http包的ListenAndServe函数。从http标准包的角度来看,gin就是实现了一个功能强大的Handler。
  2. 在ServeHTTP方法中,集中由函数handleHTTPRequest处理请求,这里会按照http方法,path进行分发。

gin是如何设计接口的

  1. 先看一个调用gin的示例:

    clipboard.png

  2. 其中gin.Default返回Engine对象,gin.Context则几乎包含了http请求中的几乎全部信息,这个Context也是gin框架设计的核心结构。源码以下图:

    clipboard.png

  3. 实际使用gin框架时,业务逻辑的处理几乎就是围绕Context对象展开的。
  4. 而路由部分所有由engine对象承担,engine对象组合了RouterGroup对象,而RouterGroup对象则实现了IRoutes接口

    clipboard.png

  5. 因此,在使用gin框架时,核心的部分就是生成一个engine对象,而后注册路由规则,最后就是借助Context对象处理须要响应的http数据。详细的例子能够参照如下连接: gin example
相关文章
相关标签/搜索