go-gin web框架下HTTP返回数据格式统一封装

格式封装

场景:希望http的返回内容格式固定,包含自定义的多个字段,json格式。查询等得到的数据全部挂在“data”这个key底下。格式形如:

{
	"code":  code,
	"msg":   msg,
	"count": count,
	"data":  data
}
package util

import (
	"net/http"
	"github.com/gin-gonic/gin"
)

// code 自己定义的状态码
// msg 返回的信息
// count 返回的内容的长度/数量
// data 返回的内容
func Response(context *gin.Context, httpStatus int, code int, msg string, count int, data interface{}) {
	context.JSON(httpStatus, gin.H{
		"code":  code,
		"msg":   msg,
		"count": count,
		"data":  data,
	})
}
func ResponseOK(context *gin.Context, count int, data interface{}) {
	context.JSON(http.StatusOK, gin.H{
		"code":  "0",
		"msg":   "Success",
		"count": count,
		"data":  data,
	})
}
// todo 其它函数按需扩展
// todo 可对code做枚举
// todo 可对msg做枚举和翻译
注意:

这里data的数据类型是空接口,网上很多文档中写的是gin.H,但是调用会报错。

于是查了一下gin.H的含义:

gin.H实际上就是map[string]interface{},
而interface{} 可以代表任意类型,
interface{} 就是一个空接口,所有类型都实现了这个接口,所以它可以代表所有类型,
所以我们可以用map的形式插入任意类型数据,

那么,既然传入的data是不确定的类型,那么我们这里使用空接口类型即可。

controller层

在controller层,即可使用该格式封装函数

package controller

import (
	"myprojectname/dao"
	"myprojectname/util"
	"github.com/gin-gonic/gin"
)

type UserController struct {
}

func (u UserController) UserQueryAll(c *gin.Context) {
	userdao := dao.UserDAO{}
	users := userdao.UserQueryAll()

    // 原来的调用方式
	// c.JSON(http.StatusOK, gin.H{
	// 	"data": users,
	// })

	util.ResponseOK(c, len(users), users)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值