func ExampleWrapCode() {
err1 := errors.New("permission denied")
err2 := gerror.WrapCode(gcode.New(10000, "", nil), err1, "Custom Error")
fmt.Println(err2.Error())
fmt.Println(gerror.Code(err2).Code())
// Output:
// Custom Error: permission denied
// 10000
}
func ExampleWrapCodef() {
err1 := errors.New("permission denied")
err2 := gerror.WrapCodef(gcode.New(10000, "", nil), err1, "It's %s", "Custom Error")
fmt.Println(err2.Error())
fmt.Println(gerror.Code(err2).Code())
// Output:
// It's Custom Error: permission denied
// 10000
}
9 Comments
qianyunhuayu
在开发一个微服务,业务异常时需要给调用方返回code和msg,在分层代码上应该在哪一层把这个code确定呢?有这个问题的原因是使用wrapCode时,上一层的code会被覆盖,这样对于一些低层方法的错误code就没有意义。我思考的结论是低层方法不使用code的错误,在service层wrapCode确定code,然后在api时判断是否有code,有的话直接用,没有的话返回通用的code。
郭强
上层的错误码把底层的错误码覆盖是很正常的操作,越上层则越贴近业务,而业务层只关心业务的错误码,而不是底层的错误码。具体排查错误的时候,底层错误码才更具有意义。我的建议是直接
Wrap
即可,不要顾忌什么层级。qianyunhuayu
感谢回复。后面我采用的方法就是您上面说的,不去关心层级,有需要就直接wrap。
问冰
大佬们我有些没理解这个结论,是说因为底层的错误码能更好的溯源,所以最好在底层将错误码抛出上层直接wrap的意思吗?
youxue2016
请问如何对已有的系统自带的错误码
{
"code": 0,
"message": "",
"data": null
}
进行补充message的信息呢.这是系统请求成功后的返回,我想设置message为"请求成功了"
张育铭
仿造改写官方的MiddlewareHandlerResponse
youxue2016
谢谢你.但是我没有找到示例呀
张育铭
首先中间件的使用 在 cmd.go:https://github.com/gogf/gf-demo-user/blob/a0ac7593eeb7fa58efed5e9ba9e4e10b09cb825e/internal/cmd/cmd.go#L22
调用的是官方默认的middleware:https://github.com/gogf/gf/blob/be77779affcc6b58d9841001c128956aeac750bc/net/ghttp/ghttp_middleware_handler_response.go#L25
那么只需要仿造默认的middleware改写下自己需要的功能,在cmd.go替换使用即可
youxue2016
谢谢你,正在学习中。感谢