JSON数据返回
JSON 是 RESTful API 最常用的响应格式,Gin 对其提供了完善支持。
使用 gin.H
gin.H 是 map[string]interface{} 的简写:
Go
r.GET("/user", func(c *gin.Context) {
c.JSON(200, gin.H{
"code": 0,
"msg": "success",
"data": gin.H{
"name": "张三",
"age": 25,
},
})
})
使用结构体
结构体可定义明确的字段和标签:
Go
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
type UserInfo struct {
Name string `json:"name"`
Age int `json:"age"`
}
r.GET("/profile", func(c *gin.Context) {
c.JSON(200, Response{
Code: 0,
Msg: "success",
Data: UserInfo{Name: "李四", Age: 30},
})
})
返回数组/切片
Go
r.GET("/users", func(c *gin.Context) {
users := []UserInfo{
{Name: "张三", Age: 25},
{Name: "李四", Age: 30},
}
c.JSON(200, gin.H{
"code": 0,
"data": users,
})
})
JSONP 响应
支持跨域 JSONP 请求:
Go
r.GET("/jsonp", func(c *gin.Context) {
c.JSONP(200, gin.H{
"message": "jsonp response",
})
})
请求 http://localhost:8080/jsonp?callback=myFunc 返回:
JavaScript
myFunc({"message":"jsonp response"});
美化 JSON 输出
开发环境需要格式化输出:
Go
func main() {
gin.SetMode(gin.DebugMode) // 开发模式,JSON 格式化输出
// gin.SetMode(gin.ReleaseMode) // 生产模式,压缩输出
r := gin.Default()
// ...
}
字段控制技巧
Go
type User struct {
Name string `json:"name"`
Password string `json:"-"` // 序列化时忽略
Email string `json:"email,omitempty"` // 为空时忽略
}
| 标签 | 作用 |
|---|---|
json:"name" | 指定 JSON 字段名 |
json:"-" | 序列化时忽略该字段 |
json:",omitempty" | 为零值时忽略 |
生产环境使用 ReleaseMode 可减少 JSON 响应体积,提升性能。
要点总结
gin.H适合快速构建响应- 结构体配合 JSON 标签规范输出格式
omitempty可省略零值字段- 生产环境使用 ReleaseMode 压缩输出
📝 发现内容有误?点击此处直接编辑