Gin框架
Gin是一个go语言编写的go web框架,它是一个拥有良好性能的API框架,基于httprouter,简单易用,支持RESTful风格API的开发。
准备工作
首先推荐一下Gin的官网,里面可以找到非常详细的使用和介绍文档: Gin Web Framework (gin-gonic.com)
1.安装下载Gin
go get -u github.com/gin-gonic/gin
2.直接在项目中引入
创建一个main.go文件,只要在文件中引入gin,就可以直接使用gin框架为我们带来的服务啦!
import "github.com/gin-gonic/gin"
我们使用的都是这个gin包为我们提供的服务,可以直接点进去看看gin的各种API,也可以通过gin package - github.com/gin-gonic/gin - Go Packages
这么一看,gin可真是太简单啦!让我们快快开始叭!
开始使用
非常原生,让我想起了远古角落里的javaweb,但确实比java好写了不少。
go作为云原生语言又拥有高并发杀手锏,“针不戳!”
闲话少叙,让我们直接开始:
首先,在引入gin后,我们可以自己配置得到一个路由,也可以使用一个gin.Default(),来得到一个含有默认中间件的默认路由,为了方便演示,我们先选择后者。
r := gin.Default()
然后,使用它的方法r.GET("/ping",func(c *gin.Context),前面就是我们通过http协议访问的路径,是一个string类型参数,后面是我们为这个路由添加的中间件,我们可以直接使用它提供的服务:c.JSON(,)返回一个json格式的结果。
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
最后,r.Run()方法监听并在 0.0.0.0:8080 上启动服务。
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
完成以上工作后,我们直接运行go文件go run main.go,这时在浏览器上访问http://localhost:8080/ping就可以看到设置好的json格式的数据。
特性
运行速度快
小内存占用。没有反射。可预测的 API 性能。
Crash 处理
Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。
错误管理
Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。
支持中间件
传入的 HTTP 请求可以由一系列中间件和最终操作来处理。
web框架必备,例如:Logger,Authorization,GZIP,最终操作 DB。
JSON 验证
Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。(接受请求后直接验证参数是否正确)
路由组
基于 Radix 树的路由,可以更加快捷的路由到某一路径下的分支,可以根据授权等其他属性分组并可以无限嵌套不降低行性能。
可扩展性
非常轻松地开发一个包含有中间件的服务,下面是示例。
func main() {
// 新建一个没有任何默认中间件的路由
r := gin.New()
// 全局中间件
// Logger 中间件将日志写入 gin.DefaultWriter,即使你将 GIN_MODE 设置为 release。
// By default gin.DefaultWriter = os.Stdout
r.Use(gin.Logger())
// Recovery 中间件会 recover 任何 panic。如果有 panic 的话,会写入 500。
r.Use(gin.Recovery())
// 你可以为每个路由添加任意数量的中间件。
r.GET("/benchmark", MyBenchLogger(), benchEndpoint)
// 认证路由组
// authorized := r.Group("/", AuthRequired())
// 和使用以下两行代码的效果完全一样:
authorized := r.Group("/")
// 路由组中间件! 在此例中,我们在 "authorized" 路由组中使用自定义创建的
// AuthRequired() 中间件
authorized.Use(AuthRequired())
{
authorized.POST("/login", loginEndpoint)
authorized.POST("/submit", submitEndpoint)
authorized.POST("/read", readEndpoint)
// 嵌套路由组
testing := authorized.Group("testing")
testing.GET("/analytics", analyticsEndpoint)
}
// 监听并在 0.0.0.0:8080 上启动服务
r.Run(":8080")
}
更多API用法可以在Gin官网山看到:示例 | Gin Web Framework (gin-gonic.com)
接下来我们就可以使用Gin愉快的开发,针不戳。