• 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)
    
    }
    
    
  • 相关阅读:
    常用的gpt网站
    C练题笔记之:Leetcode-137. 只出现一次的数字 II
    Java程序员的面试经历和题库
    Python学习笔记(十六)——Numpy
    markdown化学方程式
    Bug的严重等级和优先级别与分类
    JDBC
    【面试经典150 | 矩阵】生命游戏
    深入实现 MyBatis 底层机制的任务阶段 6-实现任务阶段 6- 在 WyxConfiguration, 读取 XxxMapper.xml,能够创建 MappperBean 对象
    JAVA并发编程——CAS与AQS源码详解
  • 原文地址:https://www.cnblogs.com/zichliang/p/16815360.html