返回字节切片格式时,需要使用 gin.Context.Writer
的 Write
方法,将字节切片作为参数传入即可,无需填写状态码。
| func main() {
r := gin.Default()
r.GET("/byte", func(c *gin.Context) {
fullPath := "请求路径: " + c.FullPath()
c.Writer.Write([]byte(fullPath))
})
r.Run()
}
|
使用 string 方式则方便许多,直接使用 gin.Context
的 String
方法;
| func (c *Context) String(code int, format string, values ...interface{});
|
参数含义为
状态码、格式字符串、值
。
| func main() {
r := gin.Default()
r.GET("/byte", func(c *gin.Context) {
fullpath := "请求路径: " + c.FullPath()
c.String(200, "请求路径: %s", c.FullPath())
})
r.Run()
}
|
最常用的就是返回 JSON 格式,方法时使用 gin.Context
的 JSON
方法:
| func (c *Context) JSON(code int, obj interface{});
|
参数含义为
状态码、数据
返回的数据可以用 map[string]interface{}
来装载,而 gin 贴心的为这个类型做了定义 gin.H
。
可以直接使用 gin.H
,这样就不用写长长一串了。
| 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
,我们还可以使用结构体来装载我们的数据。
| 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()
}
|
yaml 也是一种很好用的格式,近年来也开始逐渐兴起
| func (c *Context) YAML(code int, obj interface{});
|
参数含义为
状态码、数据
,基本和JSON是一样的,数据可以使用
gin.H
也可以使用结构体。
| 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
,我们还可以使用结构体来装载我们的数据。
| 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()
}
|
还有一种也是很常用的格式是 XML,但是这种只能使用 gin.H
,不能使用结构体装载数据。
| func (c *Context) XML(code int, obj interface{});
|
| 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()
}
|