Gin-项目初始化(New)
Gin-项目初始化(New)
基于1.10.0
工作原理
Engine核心结构体
graph TD
A[Engine] --> B[RouterGroup]
A --> C[trees: methodTrees]
A --> D[pool: sync.Pool]
A --> E[HTMLRender]
A --> F[配置选项]
F --> F1[RedirectTrailingSlash]
F --> F2[RedirectFixedPath]
F --> F3[HandleMethodNotAllowed]
F --> F4[ForwardedByClientIP]
F --> F5[UseH2C]
路由注册流程
graph TD
A[AddRoute] --> B{检查路径和方法}
B --> C[获取对应method的tree]
C --> D[创建新node如果需要]
D --> E[调用addRoute添加路由]
E --> F[更新maxParams和maxSections]
subgraph 核心函数
A --> A1[addRoute]
E --> E1[addRoute]
end
求处理流程
flowchart LR
A[HTTP请求] --> B[ServeHTTP]
B --> C[从pool获取Context]
C --> D[handleHTTPRequest]
subgraph handleHTTPRequest处理流程
D --> E{查找路由树}
E --> F[getValue匹配路径]
F --> G{找到处理器?}
G -->|是| H[执行中间件链]
G -->|否| I{MethodNotAllowed?}
I -->|是| J[处理405]
I -->|否| K[处理404]
end
H --> L[Put Context回pool]
J --> L
K --> L
subgraph 核心函数
B --> B1[ServeHTTP]
C --> C1[allocateContext]
D --> D1[handleHTTPRequest]
F --> F1[getValue]
H --> H1[Context.Next]
J --> J1[serveError]
K --> K1[serveError]
end
中间件执行流程
sequenceDiagram
participant R as Request
participant C as Context
participant M as Middlewares
participant H as Handler
R->>C: 创建Context
C->>M: 执行中间件链
loop 中间件处理
M->>M: index递增
M->>M: 执行下一个中间件
end
M->>H: 执行最终Handler
H-->>C: 返回响应
C-->>R: 写入Response
路由树结构示例
graph TD
A[root /] --> B[users]
B --> C[GET: getUsers]
B --> D[:id]
D --> E[GET: getUser]
D --> F[PUT: updateUser]
D --> G[DELETE: deleteUser]
A --> H[posts]
H --> I[GET: getPosts]
H --> J[:id]
J --> K[GET: getPost]
subgraph 路由节点核心字段
L[node] --> L1[path]
L --> L2[fullPath]
L --> L3[handlers]
L --> L4[children]
L --> L5[indices]
end
详细流程
核心结构体
1 |
初始化
1 | // New 返回一个新的空白 Engine 实例,不附带任何中间件。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Joohwan!
评论





