首页 > 其他分享 >gin框架分析一:框架结构概览

gin框架分析一:框架结构概览

时间:2023-01-24 15:44:41浏览次数:28  
标签:http Render 框架 概览 Handler HandlerFunc gin 框架结构

简介

Gin是一个用 Go (Golang) 编写的 web 框架,其速度快,简单易学,结构简单。

总体结构

主要类图

 gin框架核心为Engin类,其继承RouterGroup类并实现了GO标准库中的哦http.Handler接口并实现其中ServeHTTP函数作为框架对HTTP请求的处理入口;

 Context类提供对http.ResponseWriter,  http.Request的一个封装;

 node和methodTree构成gin框架的路由和相关处理器;

 Render接口的实现类完成对返回数据的不同渲染处理。

GIN基本组件

gin框架基本结构如下图:

 gin路由(trees)

图中trees为gin框架中的路由,其由methodTree构成为一个名为methodTrees的数组结构,其通过methodTree中的method字段分别对各种HTTP请求如POST、GET、DELETE等分类,并将对应路由构成树状结构:

源码中定义如下:

// method用于区分不同种类请求
type methodTree struct {
   method string
   root   *node
}

// 不同种类请求构成数组结构
type methodTrees []methodTree
trees            methodTrees 

 如上图所示,对于表中POST请求将构成图中的路由树结构,且对于请求“/mypost/a1”将会由"main.main.func6"方法处理。

 gin context

c := engine.pool.Get().(*Context)
c.writermem.reset(w)
c.Request = req
c.reset()

封装http.ResponseWriter,  http.Request。

render  

// Render interface is to be implemented by JSON, XML, HTML, YAML and so on.
type Render interface {
	// Render writes data with custom ContentType.
	Render(http.ResponseWriter) error
	// WriteContentType writes custom ContentType.
	WriteContentType(w http.ResponseWriter)
}

var (
	_ Render     = JSON{}
	_ Render     = IndentedJSON{}
	_ Render     = SecureJSON{}
	_ Render     = JsonpJSON{}
	_ Render     = XML{}
	_ Render     = String{}
	_ Render     = Redirect{}
	_ Render     = Data{}
	_ Render     = HTML{}
	_ HTMLRender = HTMLDebug{}
	_ HTMLRender = HTMLProduction{}
	_ Render     = YAML{}
	_ Render     = Reader{}
	_ Render     = AsciiJSON{}
	_ Render     = ProtoBuf{}
	_ Render     = TOML{}
)

render的实现类实现了对不同前端的渲染方式。

 engin

err = http.ListenAndServe(address, engine.Handler())

func (engine *Engine) Handler() http.Handler {
   if !engine.UseH2C {
      return engine
   }

   h2s := &http2.Server{}
   return h2c.NewHandler(engine, h2s)
}

 engin作为gin的核心,其实现http.Handler接口并实现ServeHTTP(ResponseWriter, *Request)的http.Handler函数作为gin框架入口,从而完成对原生net/http包的封装扩展。

HandlerFunc

// HandlerFunc defines the handler used by gin middleware as return value.
type HandlerFunc func(*Context)

// HandlersChain defines a HandlerFunc slice.
type HandlersChain []HandlerFunc

HandlerFunc作为gin中路由处理定义以及GIN中间件的定义,在处理具体的请求时将会获取对应的中间件机及处理函数去处理请求。

结论

整体上看gin框架比较简单易懂,其是对原生http.Server的扩展,通过GIN的分析可以明白一个基本的WEB框架如何去实现以及实现过程中的重点组成部分是什么。

标签:http,Render,框架,概览,Handler,HandlerFunc,gin,框架结构
From: https://www.cnblogs.com/xmy20051643/p/17030978.html

相关文章

  • Let‘s begin!
    继https://www.youtube.com/watch?v=PtQiiknWUcI之后https://www.youtube.com/watch?v=c708Nf0cHrs这个课程更加符合我的要求Let‘sbegin!......
  • ABB 800XA学习笔记66:项目框架结构17
    这篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记66:项目框架结构17_来自金沙江的小鱼_新浪博客(sina.com.cn)5.7测试(模拟)模式可以不使用任何物理硬件模拟一个项......
  • ABB 800XA学习笔记63:项目框架结构64:https://blog.sina.com.cn/s/blog_724246b90102zji
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记63:项目框架结构14_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我爱记录一遍,以免丢失5.6.3声明窗格使用申......
  • ABB 800XA学习笔记64:项目框架结构15
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记64:项目框架结构15_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一遍,以免丢失5.6.4消息窗格消息窗......
  • ABB 800XA学习笔记65:项目框架结构16
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记65:项目框架结构16_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我再记录一遍,以免丢失5.6.5代码窗格代码窗......
  • ABB 800XA学习笔记59:项目框架结构10
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记59:项目框架结构10_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一遍,以免丢失居胥学习。5.4.4例子......
  • ABB 800XA学习笔记60:项目框架结构11
    这一篇学习笔记我在新浪记录过,地址是ABB800XA学习笔记60:项目框架结构11_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一遍,以免丢失5.5自动同步本节概述了co......
  • ABB 800XA学习笔记61:项目框架结构12
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记61:项目框架结构12_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一遍,以免丢失5.6POU(程序组织单元)编......
  • ABB 800XA学习笔记62:项目框架结构13
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记62:项目框架结构13_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一遍,以免丢失继续学习。5.6.3编辑......
  • ABB 800XA学习笔记56:项目框架结构7
    这一篇学习笔记我在新浪博客记录过,地址是ABB800XA学习笔记56:项目框架结构7_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一遍,以免丢失继续学习5.3.4项目树......