Categories: GoFrame 教程

GoFrame 错误码特性-错误码实现

当业务需要更复杂的错误码定义时,我们可以自定义实现业务自己的错误码,只需要实现​gcode.Code​相关的接口即可。

我们来看个例子。

自定义错误码

定义结构体并实现​gcode.code​接口定义的方法

type BizCode struct {
 code    int
 message string
 detail  BizCodeDetail
}
type BizCodeDetail struct {
 Code     string
 HttpCode int
}

func (c BizCode) BizDetail() BizCodeDetail {
 return c.detail
}

func (c BizCode) Code() int {
 return c.code
}

func (c BizCode) Message() string {
 return c.message
}

func (c BizCode) Detail() interface{} {
 return c.detail
}

func New(httpCode int, code string, message string) gcode.Code {
 return BizCode{
  code:    0,
  message: message,
  detail: BizCodeDetail{
   Code:     code,
   HttpCode: httpCode,
  },
 }
}

定义业务错误码

var (
 CodeNil      = New(200, "OK", "")
 CodeNotFound = New(404, "Not Found", "Resource does not exist")
 CodeInternal = New(500, "Internal Error", "An error occurred internally")
 // ...
)

使用到中间件

func ResponseHandler(r *ghttp.Request) {
 r.Middleware.Next()
 // Theres 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 = CodeInternal
 } else {
  code = CodeNil
 }
 if bizCode, ok := code.(BizCode); ok {
  r.Response.WriteStatus(bizCode.BizDetail().HttpCode)
 }
 _ = r.Response.WriteJson(g.Map{
  `code`:    gcode.CodeOK.Code(),
  `message`: gcode.CodeOK.Message(),
  `data`:    res,
 })
}

冒牌SEO

前端开发者,欢迎大家一起沟通和交流。

Share
Published by
冒牌SEO

Recent Posts

vue:页面注入js修改input值

一般会直接这样写: let z…

2 小时 ago

聊聊vue3中的defineProps

在Vue 3中,defineP…

1 周 ago

在 Chrome 中删除、允许和管理 Cookie

您可以选择删除现有 Cooki…

2 周 ago

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

3 周 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

4 周 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

1 月 ago