-先创建client.go文件并定义包名
package client
type Client struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
type Handler interface {
parse(detail *Client)
}
type HandleFunc func(*Client)
func (f HandleFunc) parse(detail *Client) {
f(detail)
}
// 闭包函数,当需要修改默认参数时调用
func SetCode(code int) HandleFunc {
return func(this *Client) {
this.Code = code
}
}
func SetMsg(msg string) HandleFunc {
return func(this *Client) {
this.Msg = msg
}
}
/** 返回统一数据格式,
*** 例:{"data": data, "msg": "ok", "code": 0}
*** msg默认为ok, code默认为0,data为返回的具体内容
*** 若要返回其他code或msg则可以调用SetCode或SetMsg方法
*** 具体使用方式 res := common.ClientData(data, common.SetCode(1), common.SetMsg("mssage"))
**/
func ClientData(data interface{}, arg ...Handler) Client {
// 默认返回数据格式的结构体
defaultData := &Client{
Msg: "ok",
Code: 0,
}
for _, item := range arg {
// 接口函数调用闭包函数
item.parse(defaultData)
}
return Client{Data: data, Code: defaultData.Code, Msg: defaultData.Msg}
}
使用
我个人是配合gin框架一起使用的,其他情况请根据自身环境使用
package controller
import (
"study/client" // 引入client包,请根据自身项目名称引入,我的项目名称叫study
"net/http"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
func GetUser(c *gin.Context) {
// res := client.ClientData("", client.SetMsg("出错了"), client.SetCode(10))
// c.JSON(http.StatusOk, res)
// 返回{"data": "", "msg": "出错了", "code": 10}
type User struct {
Name string `json:"name"`
}
user := User{ "张三" }
res := client.ClientData(user)
c.JSON(http.StatusOk, res)
// 返回{"data": { "name": "张三" }, "msg": "ok", "code": 0}
}