规范大项目的错误码和响应方法 | 青训营笔记

135 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

起因:每次返回数据给客户端都要c.JSON一下,然后还要手写一下code,和错误描述,感觉有点麻烦,代码也很多,看起来有点乱,这种方式不是很好,就想精简一下代码。

首先将错误码规范一下,定义一个结构体,需要哪个错误码,只需要调用对应的就可以了,如果只单独需要code或msg也可以单独调用。

image.png

0成功,1失败,100000是服务错误,100001是无效参数,剩下的根据模块功能划分。

然后是封装响应方法,这里我做了两次修改,用了两种不同的方法,方法1:

image.png

首先New一个Response,参数可以看到有两个,其中第一个就是之前自定义的错误码,而第二个是不定长参数,这个不定长参数的作用其实是我想有时候我只需要传入自定义错误码返回就可以了,但是有时候我还想将详细的错误信息一起返回,这个不定长参数就起作用了,将错误断言后和msg进行拼接后,将code和msg复制给Response并返回。

使用示例:

image.png

可以看到上面我们调用了两次NewResponse,第一次是参数验证失败的话,直接返回一个无效参数的提示,第二次则增加了一个err,将错误也一并返回回去。

这样看起来虽然简洁了一些,但还不是很满意,随后我又再次调整。

首先还是一个结构体,里面只有ctx,然后我又New了一些,将传入的gin.Context复制给ctx,并返回,代码如图所示:

image.png

然后又定义了几个方法。

RespOK:这个方法用于我们有时候只想告诉客户端它操作成功就可以了,那么就可以使用这个方法

RespFail:这个方法有参数,我们判断传入的自定义错误码是否为空,如果为空就表示只恢复失败即可,如果
有参数,就表示回复具体的错误码和描述

RespFailDetail:这个跟之前的NewResponse差不多,将错误详情一并回复

RespData:回复中携带有数据就可以调用这个方法

代码如图所示:

image.png

这下看起来就清爽多了,并且从方法名就能轻易看出要执行的操作是什么,比如响应成功,响应失败,响应错误详情还是响应数据,顿时一目了然。