Gin 框架简介
简介
Gin 是一个基于 Go 语言编写的 Web 框架,与 martini 框架类似,但拥有更好的性能,借助高性能的 httprouter,速度提升了近 40 倍。如果你追求高性能和开发效率,你会爱上 Gin 框架。
开始介绍 Gin 框架的使用之前,我们先来简单看一下它的特性和优势,目前的 Gin 框架是 1.x
版本。
功能特性
快速
- 基于 Radix 树(一种更节省空间的 Trie 树结构)的路由,占用内存更少;
- 没有反射;
- 可预测的 API 性能。
内置路由器
开箱即用的路由器功能,不需要做任何配置即可使用。
支持中间件
传入的 HTTP 请求可以经由一系列中间件和最终操作来处理,例如 Logger、Authorization、GZIP 以及最终的 DB 操作。
Crash 处理
Gin 框架可以捕获一个发生在 HTTP 请求中的 panic 并 recover 它,从而保证服务器始终可用。此外,你还可以向 Sentry 报告这个 panic!
JSON 验证
Gin 框架可以解析并验证 JSON 格式的请求数据,例如检查某个必须值是否存在。
路由群组
支持通过路由群组来更好地组织路由,例如是否需要授权、设置 API 的版本等,此外,这些群组可以无限制地嵌套而不会降低性能。
API 冻结
支持 API 冻结,新版本的发布不会破坏已有的旧代码。
错误管理
Gin 框架提供了一种方便的机制来收集 HTTP 请求期间发生的所有错误,并且最终通过中间件将它们写入日志文件、数据库或者通过网络发送到其它系统。
内置渲染
Gin 框架提供了简单易上手的 API 来返回 JSON、XML 或者 HTML 格式响应。
可扩展性
我们将会在后续示例代码中看到 Gin 框架非常容易扩展。
易于测试
Gin 框架提供了完整的单元测试套件。
知名项目
以下知名项目都是使用 Gin 框架开发的:
1 条评论
Radix 树: 在计算机科学中,基数树(Radix Trie,也叫基数特里树或压缩前缀树)是一种数据结构,是一种更节省空间的Trie(前缀树),其中作为唯一子节点的每个节点都与其父节点合并,边既可以表示为元素序列又可以表示为单个元素。 因此每个内部节点的子节点数最多为基数树的基数r ,其中r为正整数,x为2的幂,x≥1,这使得基数树更适用于对于较小的集合(尤其是字符串很长的情况下)和有很长相同前缀的字符串集合。
基数树的查找方式也与常规树不同(常规的树查找一开始就对整个键进行比较,直到不相同为止),基数树查找时节点时,对于节点上的键都按块进行逐块比较,其中该节点中块的长度是基数r; 当r为2时,基数树为二进制的(即该节点的键的长度为1比特位),能最大程度地减小树的深度来最小化稀疏性(最大限度地合并键中没有分叉的节点)。 当r≥4且为2的整数次幂时,基数树是r元基数树,能以潜在的稀疏性为代价降低基数树的深度。
应用 基数树可用来构建关联数组。 用于IP 路由。 信息检索中用于文本文档的倒排索引。
操作 基数树支持插入、删除、查找操作。查找包括完全匹配、前缀匹配、前驱查找、后继查找。所有这些操作都是O(k)复杂度,其中k是所有字符串中最大的长度。