• Golang-Gin Response 统一返回restful格式的数据


    目的: gin返回restful格式的数据,返回的200,201 的数据 也包括异常时的404/500等情况
    全局统一返回RESTful风格数据,主要是实现Respon接口的方法,对返回值在输出之前进行修改。

    直接调用下文代码即可

    第一种方式

    点击展开
    package response
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    // Response
    // context 上下文
    // httpStatus http 状态码
    // code 自己定义的状态码
    // data 返回的空接口
    // msg 返回的信息
    func Response(context *gin.Context, httpStatus int, code int, data gin.H, msg string) {
    	context.JSON(httpStatus, gin.H{
    		"code": code,
    		"data": data,
    		"msg":  msg,
    	})
    }
    
    func Success(context *gin.Context, data gin.H, msg string) {
    	context.JSON(http.StatusOK, gin.H{
    		"code": 200,
    		"data": data,
    		"msg":  msg,
    	})
    }
    
    func Fail(context *gin.Context, data gin.H, msg string) {
    	context.JSON(http.StatusOK, gin.H{
    		"code": 400,
    		"data": data,
    		"msg":  msg,
    	})
    }
    
    func UnprocessableEntity(context *gin.Context, data gin.H, msg string) {
    	context.JSON(http.StatusUnprocessableEntity, gin.H{
    		"code": 422,
    		"data": data,
    		"msg":  msg,
    	})
    }
    
    

    后续可以自己添加方法然后固定的格式

    第二种方式

    构建一个结构体 然后只有有些无用的值是可以不传的。
    这种方式对比上一种更加灵活多变。

    点击展开
    package api
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    	"reflect"
    )
    
    type ResponseJson struct {
    	Status int    `json:"-"`
    	Code   int    `json:"code,omitempty"`
    	Msg    string `json:"msg,omitempty"`
    	Data   any    `json:"data,omitempty"`
    }
    
    // IsEmpty 判断结构体是否为空
    func (r ResponseJson) IsEmpty() bool {
    	return reflect.DeepEqual(r, ResponseJson{})
    }
    
    // 构建状态码 ,如果 传入的ResponseJson没有Status 就使用默认的状态码
    func buildStatus(resp ResponseJson, defaultStatus int) int {
    	if resp.Status == 0 {
    		return defaultStatus
    	}
    	return resp.Status
    }
    
    func HttpResponse(ctx *gin.Context, status int, resp ResponseJson) {
    	if resp.IsEmpty() {
    		ctx.AbortWithStatus(status)
    		return
    	}
    	ctx.AbortWithStatusJSON(status, resp)
    }
    
    func Success(ctx *gin.Context, resp ResponseJson) {
    	HttpResponse(ctx, buildStatus(resp, http.StatusOK), resp)
    }
    
    func Fail(ctx *gin.Context, resp ResponseJson) {
    	HttpResponse(ctx, buildStatus(resp, http.StatusBadRequest), resp)
    }
    
    func ServerFail(ctx *gin.Context, resp ResponseJson) {
    	HttpResponse(ctx, buildStatus(resp, http.StatusInternalServerError), resp)
    
    }
    
    
  • 相关阅读:
    【Java进阶篇】第五章 集合(上)--Collection集合
    力扣:111. 二叉树的最小深度(Python3)
    VsCode的leetcode插件无法登录
    MATLAB小技巧(23)矩阵分析--模拟退火
    【陪学职言】如何让自己40岁以上还有竞争力?
    从Spring源码探究IOC初始化流程
    机器学习之基础知识(全)
    科研工具分享-SCI写作课
    Mysql查询操作 联合查询 子查询
    竞赛选题 深度学习人脸表情识别算法 - opencv python 机器视觉
  • 原文地址:https://www.cnblogs.com/zichliang/p/16815360.html