response

这篇博客介绍了如何利用Gin框架进行接口开发时,对返回响应的结构进行封装,包括定义Response结构体、构造函数、追加消息和数据的方法,以及创建通用和模块级错误代码。示例展示了在用户修改密码的控制器中如何应用这些响应结构。
摘要由CSDN通过智能技术生成

目标:使用Gin框架开发接口,返回响应结构封装,统一管理。

$ mkdir response && cd response

封装返回响应的字段结构

$ vim response.go
package response

import (
    "encoding/json"
    "log"
)

type Response struct {
    Code int         `json:"code"`
    Msg  string      `json:"msg"`
    Data interface{} `json:"data"`
}

// Response 构造函数
func response(code int, msg string) *Response {
    return &Response{
        Code: code,
        Msg:  msg,
        Data: nil,
    }
}

// WithMsg 追加响应消息
func (t *Response) WithMsg(msg string) Response {
    return Response{
        Code: t.Code,
        Msg:  msg,
        Data: t.Data,
    }
}

// WithData 追加响应数据
func (t *Response) WithData(data interface{}) Response {
    return Response{
        Code: t.Code,
        Msg:  t.Msg,
        Data: data,
    }
}

// Json 返回JSON格式的数据
func (t *Response) Json() string {
    s := &struct {
        Code int         `json:"code"`
        Msg  string      `json:"msg"`
        Data interface{} `json:"data"`
    }{
        Code: t.Code,
        Msg:  t.Msg,
        Data: t.Data,
    }
    raw, err := json.Marshal(s)
    if err != nil {
        log.Println(err)
    }
    return string(raw)
}

封装通用错误代码

$ vim error.go
package response

var (
    Ok  = response(200, "操作成功")
    Err = response(500, "操作失败")
)

封装系统级错误编码

$ vim system.go
package response

//服务级错误
var (
    ErrParam   = response(10001, "参数有误")
    ErrSign    = response(10002, "签名有误")
    ErrCaptcha = response(10003, "验证码错误")
    ErrPhone   = response(10004, "手机号码不合法")
)

封装用户模块编码

$ vim user.go
package response

//模块级错误 - 用户模块
var (
    ErrUserService = response(20001, "用户服务异常")
)

在Gin控制器中返回响应

例如:以用户修改密码为例

func (s *User) Password(c *gin.Context) {
    var err error
    var p request.Password
    var mu model.User

    if err = c.ShouldBindJSON(&p); err != nil {
        c.JSON(http.StatusOK, response.ErrParam)
        return
    }

    mu = model.User{}
    mu.UserName = p.UserName
    mu.Password = p.Password
    if err, _ = service.NewUser().Password(&mu, p.NewPassword); err != nil {
        c.JSON(http.StatusOK, response.Err)
        return
    }

    c.JSON(http.StatusOK, response.Ok)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值