golang返回统一数据结构

-先创建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}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容