go fiber: 抛出自定义异常

news/2024/11/15 11:29:09/文章来源:https://www.cnblogs.com/architectforest/p/18547627

一,代码:

1,自定义错误类:

package configimport ("fmt"
)
//定义错误代码和错误信息
type MyError struct {Code    intMsg     string
}
//需要定义通用的Error()方法
func (e MyError) Error() string {return fmt.Sprintf("Code: %d,Msg: %s",e.Code, e.Msg)
}

2,代码中抛出异常

package businessimport ("industry/config")//得到多个用户,按分页返回
func GetUserList(page int ,pageSize int) (string,error) {err := config.MyError{Code: 100, Msg: "遇到错误抛出自定义异常1234"}panic(&err)return "1,2,3",nil
}

3, middleware中捕获异常,按类型进行处理

package middlewareimport ("fmt""runtime/debug""time""github.com/gofiber/fiber/v2""industry/config"
)func NewRecover(c *fiber.Ctx) (err error) { //nolint:nonamedreturns // Uses recover() to overwrite the error// Catch panicsdefer func() {if r := recover(); r != nil {//如果是自定义异常时,则不需写日志if err1, ok1 := r.(*config.MyError); ok1 {fmt.Println("----------找到了自定义错误:")fmt.Println(err1)fmt.Println("错误代码:"+fmt.Sprintf("%d", err1.Code))fmt.Println("错误信息:"+err1.Msg)//接收到用户自定义错误,不再写到日志中err = err1} else {timeStr:=time.Now().Format("2006-01-02 15:04:05")//得到时间,ip地址,请求的地址,参数,user-agent,fullURL := c.OriginalURL()clientIP := c.IP()method := c.Method() // 获取请求方法userAgent := c.Get("User-Agent")// 获取所有查询参数queryParams := fmt.Sprintf("%v",c.Queries())fmt.Println("Query Params:", queryParams)//写到错误日志中filename:="/data/logs/gologs/exception-" + time.Now().Format("2006-01-02") + ".log"content:="["+timeStr+"] "+r.(error).Error()+"\n"+clientIP+" "+method+" "+fullURL+" "+userAgent+"\n"+queryParams+"\n"+string(debug.Stack())+"\n"config.GlobalWriteFile(filename,content)var ok boolif err, ok = r.(error); !ok {// Set error that will call the global error handlererr = fmt.Errorf("%v", r)}}}}()// Return err if exist, else move to next handlerreturn c.Next()
}

4, 返回错误信息时也按类型判断后处理

routes.go

package routesimport ("github.com/gofiber/fiber/v2""industry/controller""industry/middleware""industry/config""fmt"
)func SetupRoutes() *fiber.App {app := fiber.New(fiber.Config{ErrorHandler: func(c *fiber.Ctx, err error) error {// 发送自定义错误页面// 如果是自定义错误,不再统一按500返回if err1,ok1:=err.(*config.MyError);ok1 {fmt.Println(err1)fmt.Println("route:错误是自定义异常")return c.SendString("内部错误代码:"+fmt.Sprintf("%d", err1.Code)+",错误信息:"+err1.Msg)} else {fmt.Println("route:错误不是自定义异常")return c.SendString("内部错误:500,"+err.Error())}},})app.Use(middleware.NewRecover)app.Use(middleware.ApiSign)//用户模块userController := controller.NewUserController()user := app.Group("/user")user.Get("/info", userController.GetUser)user.Post("/", userController.CreateUser)user.Get("/list", userController.ListUser)//文章模块articleController := controller.NewArticleController()article := app.Group("/article")article.Get("/info", articleController.GetArticle)article.Post("/add", articleController.CreateArticle)article.Get("/list", articleController.ListArticle)return app
}

二,测试效果:

 

 

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

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

相关文章

移动端按住说话样式

下面是最终效果,手指移出指定区域就改为取消状态,松开手指就取消,手指没有移出指定区域,状态为录音中,松开手指为结束录音状态下面是代码<!DOCTYPE html> <html lang="zh"> <head><meta charset="UTF-8"><meta name="…

联想 进入bios u盘启动

先插入u盘,再选择选项 thinkpad e485 , f12快速选择启动选项 , f1 进入bios其他 联想进入bios设置u盘启动,网上的博客资料中有这样一句话: “7、在Startup栏目中,找到“UEFI/Legacy Boot”选项,设置为“Legacy Only”,并将“CSM Support”设置为“YES”,然后找到“…

Mybatis-plus之新特性,你都用过哪些?

1.lambda方式查询 在使用Mybatis-plus进行查询时,我们正常的操作是创建一个QueryWrapper,然后根据字段去做查询操作(如下图)那么就有一个问题,每个数据库的字段都需要写出来,遇到驼峰字段还需要转换为下划线形式,非常影响开发效率。而官方也考虑到这个问题,后续的版本已…

KingbaseES V8R3集群运维案例之---集群恢复案例

KingbaseES、Kingbasecluster案例说明: KingbaseES V8R3流复制集群在专用机环境下,出现异常问题,恢复过程如下: 问题现象及解决方案: 1、现象一 如下所示,整个集群无法启动,选择其中一个节点作为主节点,数据库服务启动如下所示:解决方案: 将sys_xlog下的xxxxA.histor…

Exchange 2016部署实施案例篇-04.Ex基础配置篇(下)

上二篇我们对全新部署完成的Exchange Server做了基础的一些配置,今天继续基础配置这个话题。 DAG配置 先决条件首先在配置DGA之前我们需要确保DAG成员服务器上磁盘的盘符都是一样的,大小建议最好也相同。 其次我们需要确保有一块网卡用于数据复制使用(PS:单块网卡也可以,单…

YOLO系列技术细节(更新中)

相对于R-CNN、Fast RCNN的two-stage目标检测方式,即先在图像中提取候选框,再逐一对图像进行分类。候选框的生成可以是滑动窗口或选择性搜索,再对候选框进行非极大值抑制(一般只在推理时做非极大值抑制,训练时需要这些重复的框)。而YOLO则是one-stage的端到端形式:输入图…

Apple Logic Pro 11.1 - 专业音乐制作 (音频编辑)

Apple Logic Pro 11.1 - 专业音乐制作 (音频编辑)Apple Logic Pro 11.1 - 专业音乐制作 (音频编辑) Logic Pro 配备全新 AI 功能,引领音乐创作再上新阶 请访问原文链接:https://sysin.org/blog/apple-logic-pro/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org…

【Civit3D 2025下载与安装教程】

1、安装包 「Civil3d_2025」: 链接:https://pan.quark.cn/s/b05281a72f24 提取码:PUWx 「Civil3D2020」: 链接:https://pan.quark.cn/s/61c01d7bd533 提取码:RbML 2、安装教程(建议关闭杀毒软件) 1) 双击Setup.exe安装,弹窗安装对话框2) 勾选‘我同意。。…

[Flask]SSTI 1

[Flask]SSTI 1 根据题目判断这是一道SSTI参数处理不当的漏洞,打开页面显示Hello guest,猜测参数名为user发现页面无任何变化,于是尝试name,成功回显尝试{{2*2}},页面显示4,存在SSTI注入构造payload,成功执行任意代码 # payload的解释:获取eval函数并执行任意代码?name=…

凯宇星辉:CRM助力实现数字化“领跑”转型

近日,第14届中国轻工业信息化大会及智能居家展洽会在重庆举行。会上同步发布了中国轻工业数字化转型“领跑者”相关案例成果287项,涉及家电、五金、照明、酿酒食品等行业,其中,纷享销客合作客户辽宁凯宇星辉实业集团有限公司(以下简称“凯宇星辉”)提报的《基于CRM系统的…