go-zero 统一返回

1、整体目录结构

2、全局处理主入口

package manageimport ("net/http""github.com/zeromicro/go-zero/rest/httpx"
)type Body struct {Code    int         `json:"code"`Message string      `json:"message"`Result  interface{} `json:"data"`
}// 统一返回入口,
func ResponseHandler(w http.ResponseWriter, resp interface{}, err error) {if err != nil {httpx.OkJson(w, ErrHandler(err))// 如果err不为空的话,走错误处理函数,将err传递过去} else {// 没有错误信息,返回相应内容httpx.OkJson(w, Body{Code:    OK.Code,Message: OK.Message,Result:  resp,})}
}

2、统一错误处理主入口

package managetype CodeError struct {Code    int    `json:"code"`Message string `json:"message"`
}// 实现error的接口  然后CodeError继承一下Error方法  CodeError就为error类型的返回值
func (e *CodeError) Error() string {return e.Message
}// 返回给前端的数据
func (e *CodeError) ErrorResponse() CodeError {return CodeError{Code:    e.Code,Message: e.Message,}
}// 用来自定义抛出的异常,支持调用传递
func NewCodeError(code int, msg string) error {return &CodeError{Code:    code,Message: msg,}
}// 提供new方法,任意地方传递参数返回CodeError类型的数据
func New(code int, msg string) CodeError {return CodeError{Code:    code,Message: msg,}
}// 默认异常状态码函数,只需传递错误信息即可,默认返回code-10001
func DefaultErrHandler(message string) error {return &CodeError{Code:    ServerError.Code,Message: message,}
}// 自定义错误返回函数 错误函数主入口
func ErrHandler(err error) interface{} {switch err.(type) {// 如果错误类型为CodeError,就返回错误类型的结构体case *CodeError:return errdefault:// 系统错误,500 错误提示return CodeError{Code: ServerError.Code, Message: err.Error()}}
}

3、全局异常状态

package managevar (OK          = New(0, "操作成功")ReidsError  = New(6379, "redis连接失败")JwtError    = New(500, "JWT解密失败")TokenError  = New(401, "Token已过期")ServerError = New(500, "服务器内部错误")
)

4、修改路由Handler函数

package basicsimport ("go/application/internal/logic/basics""go/application/internal/svc"basicsType "go/application/internal/types/basics"manage "go/pkg/manage""net/http""github.com/zeromicro/go-zero/rest/httpx"
)func LoginHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req basicsType.LoginReqif err := httpx.Parse(r, &req); err != nil {manage.ResponseHandler(w, nil, err)return}l := basics.NewLoginLogic(r.Context(), svcCtx)resp, err := l.Login(&req)manage.ResponseHandler(w, resp, err)}
}

httpx.OkJsonCtx和httpx.ErrorCtx() 替换为 manage.ResponseHandler

搞定收工

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/654881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMq源码搭建报错No route info of this topic: TopicTest

原因 因为broker没有注册到namsesrv中,导致无法创建Topic 解决办法 启动Borker时,指定namsesrv地址 over!!!

防御保护常用知识

防火墙的主要职责在于:控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之 后做出对应的动作 防火墙分类主要有四类: 防火墙吞吐量 --- 防火墙同一时间能处理的数据量多少 防火墙的发展主要经过以下阶段; 传统防火墙&#xf…

SpringBoot之JWT登录

JWT JSON Web Token(JSON Web令牌) 是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任,因为它是数字签名的。jwt可以使用秘密〈使用HNAC算法…

Element table组件内容\n换行

漂亮的页面总是让人心旷神怡,层次清晰的页面让用户操作起来也是易于上手及展示。 如下的页面展示就是非常low的:用户根本阅读其中的数据。 在这个页面,根据用户填写过程生成多次填写记录,如果不进行层次性的展示,数据…

qemu调试kernel启动(从第一行汇编开始)

一、背景 大部分qemu调试kernel 都是讲解从start_kernel开始设置断点,然后开启调试; 但是我们熟悉linux启动流程的伙伴肯定知道,在start_kernel之前还有一段汇编,包括初始化页表及mmu等操作, 这部分如何调试呢&#x…

漏洞原理linux操作系统的SqlMap工具的使用

漏洞原理linux操作系统的SqlMap工具的使用 Linux操作系统基础操作链接: 1024一篇通俗易懂的liunx命令操作总结(第十课)-CSDN博客 kali的IP地址:192.168.56.1 实操 # kali中使用sqlmap http://192.168.56.1/ sqlmap -u http://192.168.56.1/news/show.php?id46 sqlmap -u …

​ArcGIS Pro 如何批量删除字段

在某些时候,我们得到的图层属性表内可能会有很多不需要的字段,如果挨个去删除会十分的麻烦,对于这种情况,我们可以使用工具箱内的字段删除工具批量删除,这里为大家介绍一下使用方法,希望能对你有所帮助。 …

如何创建用户友好的软件产品说明书?(上:建议篇)

之前我有写过关于制作和编写用户友好的产品说明书需要注意哪些地方,以及有哪些方法可以比较快速制作编写产品说明书。但是有网友在后台私信我,说想要知道细化到软件的产品说明书需要注意什么?所以我打算将关于“软件产品说明书”的主题分成两…

IDEA常用插件(本人常用,不全)

文章目录 一、图标提示类插件1、Lombok插件(用户配合lombok依赖的工具)2、MybatisX插件3、GitToolBox4、VUE.js(vue编程使用)5、ESLint(vue编程使用) 二、代码自动生成插件1、EasyCode插件:自动…

Android中下载 HAXM 报错 Intel® HAXM installation failed,如何解决?

最近在搭建 Flutter 环境,但是在 Android Studio 中安装 Virtual Device 时,出现了一个 问题 Intel HAXM installation failed. To install Intel HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructio…

爬虫学习笔记-xpath的基本使用

html示例 基本使用 #导入包 #pip install lxmlfrom lxml import etree# xpath解析 # 1.本地文件 etree.parse # 2.服务器响应的数据 etree.HTML()tree etree.parse(baidu.html) # 获取所有的ul下的li标签 l1 tree.xpath(//ul/li) print(l1) print(len(l1))# 获取所有带有id的…

某大厂关于Linux系统相关面试题

一、Linux系统和Shell 1、写一个sed命令,修改/tmp/input.txt文件的内容,要求:(1) 删除所有空行;(2) 在非空行前面加一个"AAA",在行尾加一个"BBB",即将内容为11111的一行改为&#xff1…

安防监控项目

一、安防监控项目的概述 安防监控项目是指利用先进的技术手段对特定区域、场所或对象进行全天候、全方位的监控和管理,以确保安全和防范各类安全风险。随着科技的不断发展,安防监控项目已经从传统的简单监控摄像头向数字化、智能化方向发展。这些项目广…

代码随想录算法刷题训练营day19

代码随想录算法刷题训练营day19:LeetCode(404)左叶子之和、LeetCode(112)路径总和、LeetCode(113)路径总和 II、LeetCode(105)从前序与中序遍历序列构造二叉树、LeetCode(106)从中序与后序遍历序列构造二叉树 LeetCode(404)左叶子之和 题目 代码 /*** Definitio…

E. Vlad and a Pair of Numbers(位运算)

思路:如果x在这一位是1,说明a,b在这一位一个是1一个是0,我们默认a为1,b为0.. 对于n的一些位为0,那么a,b在这一位肯定相同。我们想,如果a和b的和右移一位与x相同,所以1的位置是相同的…

图算法 - 最短路径算法 (dijkstra) 迪克斯特拉算法

解决问题: 图中某个顶点到某一个顶点的最短路径 适用场景: 查找带权图的最短路径 代码设计: 首先定义一张图(邻接矩阵,二维数组方式实现) 生成一张图 迪克斯特拉算法实现 采用贪婪的方式,每次获取最短的一条路径,作为下次遍历的起点 使用visited 记录被访问过的节点避免…

网络安全04-sql注入靶场第一关

目录 一、环境准备 1.1我们进入第一关也如图: ​编辑 二、正式开始第一关讲述 2.1很明显它让我们在标签上输入一个ID,那我们就输入在链接后面加?id1 ​编辑 2.2链接后面加个单引号()查看返回的内容,127.0.0.1/sqli/less-1/?id1,id1 …

sqli-labs-master less-1 详解

目录 关于MySQL的一些常识 information_schema 常用的函数 sqli-labs-master less-1 分析PHP源码 测试 关于MySQL的一些常识 information_schema information_schema 是 MySQL 数据库中的一个元数据(metadata)数据库,它包含…

C++ 数论相关题目 求组合数Ⅱ

给定 n 组询问,每组询问给定两个整数 a,b ,请你输出 Cbamod(1097) 的值。 输入格式 第一行包含整数 n 。 接下来 n 行,每行包含一组 a 和 b 。 输出格式 共 n 行,每行输出一个询问的解。 数据范围 1≤n≤10000 , 1…

方法、数组

方法 是语句的集合,在一起执行一个功能 它是解决一类问题的步骤的有序集合 包含于类或对象中 在程序中创建,在其他地方被引用 设计方法的原则:方法的本意是功能块,就是实现某一个功能的语句块的集合。设计时,最好保持…