Skip to content

response 定义统一 HTTP 响应结构与快捷构造方法;errs 定义业务异常类型,供 handler c.Error 登记、middleware.Recover 渲染。两者配套:正常路径手写 response.Ok,异常路径 c.Error(errs.New(...))

关键导出

  • response.R[T any] struct{Code int; Msg string; Data T}
  • response.Ok[T](data T) R[T] / OkVoid() R[any] / OkMsg(msg) R[any] / OkMsgData[T](msg, data) R[T]
  • response.Fail(msg) R[any] / FailCode(code, msg) R[any] / Warn(msg) R[any]
  • response.IsSuccess() / IsError()
  • 常量 CodeSuccess=200 / CodeFail=500 / CodeWarn=601
  • errs.ServiceError struct{Code int; Msg string; Detail string}
  • errs.New(code int, msg, detail string) *ServiceError
  • (*ServiceError).Error() string 返回 MsgDetail 只进服务端日志,不回前端)

典型用法

go
// internal/auth/handler/auth_handler.go:66
c.JSON(http.StatusOK, response.Ok(vo))
c.JSON(http.StatusOK, response.Fail("没有权限访问用户数据!"))

// internal/system/service/dept_service.go:190
return errs.New(0, "部门停用,不允许新增", "")

// internal/auth/handler 鉴权失败
_ = c.Error(errs.New(0, i18n.Msg(c.Request.Context(), "auth.grant.type.error"), ""))

坑/约定

WARNING

  • Data 字段 不加 omitempty,无数据时序列化为 null 而非省略。
  • HTTP 状态码恒 200,业务成败靠 code 字段区分——middleware/recover.gooplog 都按此判定,不要在 handler 里改 http.StatusBadRequest
  • errs.Code=0 表示「未指定业务码」,middleware/recover.go 回落到 CodeFail(500);传非零 Code 时按 response.FailCode 渲染。 :::

相关页:/conventions/response/conventions/error-handling/pkg-reference/middleware

基于 MIT 协议开源