39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
package response
|
||
|
||
import (
|
||
"context"
|
||
|
||
"github.com/gogf/gf/v2/frame/g"
|
||
)
|
||
|
||
// Payload 是所有接口统一返回结构。
|
||
// HTTP 状态码统一保持 200,前端通过 code 判断业务成功或失败。
|
||
type Payload struct {
|
||
Code int `json:"code"`
|
||
Message string `json:"message"`
|
||
Result interface{} `json:"result"`
|
||
}
|
||
|
||
// write 写出统一 JSON 并立即结束请求,避免 GF 默认响应中间件二次包装。
|
||
func write(ctx context.Context, payload Payload) {
|
||
r := g.RequestFromCtx(ctx)
|
||
r.Response.Status = 200
|
||
r.Response.WriteJsonExit(payload)
|
||
}
|
||
|
||
// Success 返回统一成功响应,result 字段承载业务数据。
|
||
func Success(ctx context.Context, result interface{}) {
|
||
write(ctx, Payload{Code: 0, Message: "ok", Result: result})
|
||
}
|
||
|
||
// Error 返回统一失败响应,HTTP 状态仍为 200,code 用于表达业务错误。
|
||
func Error(ctx context.Context, code int, message string) {
|
||
if code == 0 {
|
||
code = 500
|
||
}
|
||
if message == "" {
|
||
message = "服务器开小差了,请稍后重试"
|
||
}
|
||
write(ctx, Payload{Code: code, Message: message, Result: nil})
|
||
}
|