go-zero
go-zero copied to clipboard
Differentiate between params error and other errors
基于关联issue: #3128 , 现在最新版的go-zero要求最低go版本是1.20,所以可以不用兼容1.20以下版本了。
背景
现在参数解析的httpx.Parse()返回的错误不会区分是参数错误还是其他错误,希望区分开来。(因为参数错误可以显示给请求方,其他错误需要隐藏并自定义返回信息) 而现在httpx.Parse()触发的错误都是没有导出的error变量(errTypeMismatch,errValueNotSettable,errValueNotStruct),没办法用errors.Is()来判断其类型,所以用户层没法区分是参数错误还是logic返回的业务错误。 但是如果仅仅将上述errTypeMismatch,errValueNotSettable,errValueNotStruct等几个err修改为可导出,用户要一个个去匹配判断,太麻烦了,所以我的想法是:
- 新建一个可导出的ErrParamsError(标准error),使用multi error组合(
errors.Join(ErrParamError, originalErr)),这样用户侧可以用errors.Is(err, ErrParamsError)来判断。