抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Gin 返回数据格式

返回

在接收到请求,经过一番处理之后,我们需要返回结果,也就是响应请求。

响应请求的格式有 >= 5种格式:

  • []byte
  • string
  • JSON
  • XML
  • YAML
  • protobuf
  • Template

[]byte 方式

返回字节切片格式时,需要使用 gin.Context.WriterWrite 方法,将字节切片作为参数传入即可,无需填写状态码。

1
2
3
4
5
6
7
8
9
10
11
func main() {
r := gin.Default()

r.GET("/byte", func(c *gin.Context) {
fullpath := "请求路径: " + c.FullPath()

c.Writer.Write([]byte(fullpath))
})

r.Run()
}

byte 的返回结果

string 方式

使用 string 方式则方便许多,直接使用 gin.ContextString 方法;

1
func (c *Context) String(code int, format string, values ...interface{});

参数含义为状态码、格式字符串、值

1
2
3
4
5
6
7
8
9
10
11
func main() {
r := gin.Default()

r.GET("/byte", func(c *gin.Context) {
fullpath := "请求路径: " + c.FullPath()

c.String(200, "请求路径: %s", c.FullPath())
})

r.Run()
}

string 返回结果

JSON 格式

最常用的就是返回 JSON 格式,方法时使用 gin.ContextJSON 方法:

1
func (c *Context) JSON(code int, obj interface{});

参数含义为 状态码、数据

返回的数据可以用 map[string]interface{} 来装载,而 gin 贴心的为这个类型做了定义 gin.H
可以直接使用 gin.H,这样就不用写长长一串了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
r := gin.Default()

r.GET("/json1", func(c *gin.Context) {
// 方法1 使用 map[string]interface{},即 gin.H
data := gin.H{
"name": "Boii",
"age": 17,
}
c.JSON(http.StatusOK, data)
})

r.Run()
}

除了 gin.H,我们还可以使用结构体来装载我们的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
r := gin.Default()

r.GET("/json2", func(c *gin.Context) {
// 方法2 使用结构体
data := struct {
Name string `json:"name"`
Age int `json:"age"`
}{"Boii", 18}
c.JSON(http.StatusOK, data)
})

r.Run()
}

Json 结果

YAML 格式

yaml 也是一种很好用的格式,近年来也开始逐渐兴起

1
func (c *Context) YAML(code int, obj interface{});

参数含义为 状态码、数据,基本和JSON是一样的,数据可以使用 gin.H 也可以使用结构体。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
r := gin.Default()

r.GET("/json1", func(c *gin.Context) {
// 方法1 使用 map[string]interface{},即 gin.H
data := gin.H{
"name": "Boii",
"age": 17,
}
c.YAML(http.StatusOK, data)
})

r.Run()
}

除了 gin.H,我们还可以使用结构体来装载我们的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
r := gin.Default()

r.GET("/json2", func(c *gin.Context) {
// 方法2 使用结构体
data := struct {
Name string `json:"name"`
Age int `json:"age"`
}{"Boii", 18}
c.YAML(http.StatusOK, data)
})

r.Run()
}

yaml 结果

XML 格式

还有一种也是很常用的格式是 XML,但是这种只能使用 gin.H,不能使用结构体装载数据。

1
func (c *Context) XML(code int, obj interface{});
1
2
3
4
5
6
7
8
9
10
11
12
13
func main() {
r := gin.Default()

r.GET("/xml", func(c *gin.Context) {
data := gin.H{
"name": "Boii",
"age": 18,
}
c.XML(http.StatusOK, data)
})

r.Run()
}

XML 结果

哔哔