Gin 框架初探 | 青训营

89 阅读2分钟

一、Gin 简介

由于 Go 语言本身的网络库非常完善,所以相应的 Web 框架实现起来也相对来说简单一点。而 Gin 就是个简洁的 Go Web 微框架。

分装优雅,注释明确,使用简单。当然,最重要的性能优越。

二、Gin 使用

1. 创建路由

router := gin.Default()

router.GET("index", func(c *gin.Context)
{
    c.String(200, "hello")
})

router.Run()

Gin 的创建路由方式非常简单,使用gin.Default()创建一个gin的默认路由,然后使用 GET 方法将 index 地址与匿名函数绑定,只要访问127.0.0.1:8080/index,就能触发这个匿名函数。创建完成后,使用Run()方法运行路由。Run()方法可以传参,参数是端口,不传参的话开启默认端口8080。

2. 请求类型

  • GET:获取/请求数据
  • POST:上传数据
  • PUT:在服务端更新数据
  • DELETE:在服务端删除数据

分别对应 GET、POST、PUT、DELETE 方法

r := gin.Default()

r.GET("", func(*gin.Context){})
r.POST("", func(*gin.Context){})
r.PUT("", func(*gin.Context){})
r.DELETE("", func(*gin.Context){})

r.Run()

注意:同一个地址只能绑定不同类型的方法,且类型不能重复。

3. 响应

响应json

type msg struct {
    Name string `json:name`
    Age int     `json:age`
}

r.GET("/json", func(c *gin.Context) {
    c.JSON(200, msg{"xxx", 21})
    c.JSON(200, gin.H{"xxx": 22})
})

响应json首先需要一个键值对,可以自己定义一个结构体,也可以使用 map ,或者 gin 包里自带的gin.H,gin.H 是map[string]any的别名

响应xml

r.GET("/xml", func(c *gin.Context) {
    c.XML(200, msg{"xxx", 21})
    c.XML(200, gin.H{"xxx": 22})
})

接口与json一样,使用XML()方法。

响应yaml

r.GET("/yaml", func(c *gin.Context) {
    c.YAML(200, msg{"xxx", 21})
    c.YAML(200, gin.H{"xxx": 22})
})

同理

4. 参数

请求参数

r.GET("query", func(c *gin.Context) {
    user := c.Query("user")
    getuser, ok := c.GetQuery("user")
})

当网址为 127.0.0.1/query?user=2 时,可以使用 Query()GetQuery()方法获取 2 这个结果,后者比前者多了一个 ok 返回值,用于判断参数存不存在。

表单参数

r.POST("form", func(c *gin.Context) {
    user := c.PostForm("user")
    getuser, ok := c.GetPostForm("user")
})

几乎一样的接口,用于接收表单参数。

动态参数

r.POST("param/:id", func(c *gin.Context) {
    user := c.Param("id")
})

在地址后跟:id,id作为动态参数,可以使用Param()方法获取 id 值

原始参数

r.POST("raw", func(c *gin.Context) {
    body, err := c.GetRawData()
})

可以用GetRawData()方法获得所有原始数据