创新互联GoFrame教程:GoFrame 错误码特性-错误码扩展

当业务需要复杂的错误码定义时,我们推荐灵活使用错误码的​Detail​参数来扩展错误码功能。

创新互联从2013年创立,是专业互联网技术服务公司,拥有项目成都做网站、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元长寿做网站,已为上家服务,为长寿各地企业和个人服务,联系电话:028-86922220

我们来看个例子。

业务错误码

错误码定义

type BizCode struct {
	User User
	// ...
}

type User struct {
	Id   int
	Name string
	// ...
}

错误码使用

扩展错误码大多数场景下需要使用​WithCode​方法:

// WithCode creates and returns a new error code based on given Code.
// The code and message is from given `code`, but the detail if from given `detail`.
func WithCode(code Code, detail interface{}) Code

因此上面我们的自定义扩展可以这么使用:

code := gcode.WithCode(gcode.CodeNotFound, BizCode{
	User: User{
		Id:   1,
		Name: "John",
	},
})
fmt.Println(code)

即在错误码中我们可以根据业务场景注入一些自定义的错误码扩展数据,以方便上层获取错误码后做进一步处理。

改写中间件

我们将上面自定义的错误码应用到请求返回中间件中,顶层业务逻辑也可以获取到错误码对应的详情再进一步做相关的业务处理。

func ResponseHandler(r *ghttp.Request) {
	r.Middleware.Next()
	// There's custom buffer content, it then exits current handler.
	if r.Response.BufferLength() > 0 {
		return
	}
	res, err := r.GetHandlerResponse()
	code := gerror.Code(err)
	if code == gcode.CodeNil && err != nil {
		code = gcode.CodeInternalError
	}
	if detail, ok := code.Detail().(BizCode); ok {
		g.Log().Errorf(r.Context(), `error caused by user "%+v"`, detail.User)
	}
	_ = r.Response.WriteJson(ghttp.DefaultHandlerResponse{
		Code:    gcode.CodeOK.Code(),
		Message: gcode.CodeOK.Message(),
		Data:    res,
	})
}

在框架​Server​默认的日志中会自动打印​Detail​数据。

网页题目:创新互联GoFrame教程:GoFrame 错误码特性-错误码扩展
本文来源:http://www.mswzjz.cn/qtweb/news18/128968.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能