Ados

a fullstack game worker

0%

Gin学习笔记 - gin.go

Preface

今天开始阅读 gin.go 代码,这里都是一些核心的定义和默认配置相关的

Contents

Context.go 不同的是,这里在注释里明确的分块,可能是因为这里内容不好分块的原因吧

常量和变量

一些全局常量和变量的定义

常量

  • Version: gin的版本
  • defaultMultipartMemory: 默认的multipart/form-data内存尺寸为32MB

变量

  • default404Body: 默认的404状态码响应体
  • default405Body: 默认的405状态码响应体
  • defaultAppEngine: 在新建 Engine 实例的时候传给 AppEngine

类型定义

  • HandlerFunc: func(*Context)
  • HandlersChain: []HandlerFunc
  • RouteInfo:
    1
    2
    3
    4
    5
    type RouteInfo struct {
    Method string //Http 请求方法,例如GET,POST
    Path string //请求的资源路径
    Handler string //处理器的名字
    }
  • RoutesInfo: []RouteInfo

    方法

  • HandlerChain.Last(): 返回处理器链条的最后一个,一般这个都是主处理器

Engine

这个是框架的核心之一,Engine 是框架的实例,他包含里 muxer*, *中间价配置的设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
type Engine struct {
RouterGroup // 内嵌了RouterGroup,来自 routergroup.go,用于在内部配置路由器

// 自动转反斜杠,例如请求/foo/,但是只有地址为/foo的路由,客户端将会带着状态码301(GET)或307(其他请求方法)转到/foo
RedirectTrailingSlash bool

// 如果找不到处理器的话,是否自动修复请求路径
// 首先会去掉多余的路径元素,如 ../或者//
// 之后路由器会做一个不区分大小写的路径查询
// 如果可以找到对应的路径,那么就重定向到此路径,状态码301(GET)或者307(其他)
// 例如 /FOO 和 /..//Foo 都会被重定向到 /foo
// RedirectTrailingSlash依赖此项设置
RedirectFixedPath bool

// 如果当前请求无法被路由到,激活此选项将会查找是否有其他方法的此路径的处理器
// 如果找得到的话,那么会返回`Method Not Allowed`和HTTP状态码405
// 如果没有其他方法的话,那么会被发放到 NotFound 处理器
HandleMethodNotAllowed bool
ForwardedByClientIP bool

// issue #726 #755,此选项用于整合Paas而添加以 'X-AppEngine...' 开头的请求头
AppEngine bool

// 如果激活此选项,会用url.RawPath来找请求参数
UseRawPath bool

// 如果激活此选项将会对path值进行unescape
// 如果 UseRawPath 是 false,那么此选项是会直接生效的,因为会直接使用 url.Path ,也就是已经 unescape 了的
UnescapePathValues bool

// Value of 'maxMemory' param that is given to http.Request's ParseMultipartForm
// method call.
// 赋予 http.Request 的 ParseMultipartForm 方法的 maxMemory 的值
MaxMultipartMemory int64

delims render.Delims // glob前后缀
secureJsonPrefix string // 安全JSON前缀
HTMLRender render.HTMLRender // HTML渲染器
FuncMap template.FuncMap
allNoRoute HandlersChain
allNoMethod HandlersChain
noRoute HandlersChain
noMethod HandlersChain
pool sync.Pool
trees methodTrees
}