Gin 框架简介
如果你想找一个简单、高性能且社区完备的 Go 语言框架,您一定会喜欢 Gin。
Gin 是一个用 Go语言 (Golang) 编写的 Web 框架。 它起源于 martini ,但性能要好得多。
Gin 框架的性能提升,主要的得益于它的 httprouter
速度提高了 40 倍。但是 Gin 真正超过 martini 主要是还是得益于它的生态建设。
Martini 是指 (https://martini.codegangsta.io,最早的 Go 语言 Web 框架之一,只不过现在几乎无人问津了。
本章节,我们主要介绍 Gin 是什么,它解决了哪些问题,以及它如何帮助你的项目。
或者, 如果你已经准备在项目中使用 Gin,请访问 快速入门。
Gin 特性
性能高
- 使用了基于 Radix 树的路由,内存占用小。
- 没有反射。
- 可预测的 API 性能。
支持中间件
从接收 HTTP 请求开始到返回响应内容,都可以由一系列中间件和最终操作来处理。 例如:
- 使用
Logger
中间件记录日志 - 使用
BasicAuth
进行身份认证 (Authorization) - 其它的比如 GZIP,
- 最终操作 DB。
完备的 Crash 处理
Gin 可以 catch 一个发生在 HTTP 请求中的异常或错误(panic
) 并 recover
它。
这样,我们的服务器将始终可用。同时,我们还=可以向 Sentry 报告这个 panic!
JSON 验证
Gin 天然支持 JSON:
- 内置了
ShouldBindJSON()
方法和BindJSON()
方法用于获取和解析 HTTP 请求中的 JSON。 - 内置了
JSON()
方法用于响应 JSON 格式的数据并设置application/json
响应内容头。 - Gin 同时还内置了
gin.H()
方法用于快速拼装 JSON 内容。
支持路由组
Gin 内置了 group()
方法天然支持路由组功能。而且路由组功能天然能够使用 中间件。 这意味着,我们可以自定义哪些路由组是否需要授权,不同的 API 版本……
此外,路由组可以无限制地嵌套而不会降低性能。
错误管理
Gin 提供的框架初始化 gin.Default()
内置了 Logger
和 Recovery
两大中间件,它们提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误,然后将它们写入日志文件,数据库并通过网络发送。
内置渲染
Gin 天然支持多种响应格式,比如 JSON,XML 和 HTML ,并且为这些格式提供了易于使用的 API。
可扩展性
自己创建一个中间件非常简单,简单 3 - 4 行就能搞定一个中间件原型来。