# gin **Repository Path**: unsafe-rust/gin ## Basic Information - **Project Name**: gin - **Description**: No description available - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-21 - **Last Updated**: 2021-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gin #### 介绍 * 参数检验使用的是`gvalid`模块,详情请看 [gvalid](https://goframe.org/pages/viewpage.action?pageId=1114367) * `gin` 的`中间件`利用函数调用栈后进先出的特点,巧妙的完成中间件在自定义处理函数完成的后处理的操作。 #### 软件架构 * `bind`包绑定请求输入 `render`包渲染响应输出。 * Gin的路由是它的特色,其实就是因为他的存储结构。基数树的存储结构可以很快的查询到对应路由并且执行到handler。避免了每次请求循环所有路由的逻辑,提升了Gin整体的性能。 * 如果一个大型项目中GET路由有100个,如果每次请求都去循环100次查找性能会很差,如果使用基数树的存储方式可能只需要经过几次的查询。 * Gin的路由实现使用了类似前缀树的数据结构,只需遍历一遍字符串即可,时间复杂度为O(n)。 * `Engine` 结构体内嵌了 `RouterGroup` 结构体,定义了 `GET`,`POST` 等路由注册方法。 * `Engine` 中的 `trees` 字段定义了路由逻辑。`trees` 是 `methodTrees` 类型(其实就是 `[]methodTree`),`trees` 是一个数组,不同请求方法的路由在不同的树(`methodTree`)中。