Gin框架简单入门 | 青训营笔记

164 阅读3分钟

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愉快的开发,针不戳。