Files
ai_wht_wechat/go_backend/common/response.go
2026-01-06 19:36:42 +08:00

102 lines
2.4 KiB
Go

package common
import (
"net/http"
"github.com/gin-gonic/gin"
)
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
// Success 成功响应
func Success(c *gin.Context, data interface{}) {
c.JSON(http.StatusOK, Response{
Code: 200,
Message: "success",
Data: data,
})
}
// SuccessWithMessage 成功响应(自定义消息)
func SuccessWithMessage(c *gin.Context, message string, data interface{}) {
c.JSON(http.StatusOK, Response{
Code: 200,
Message: message,
Data: data,
})
}
// Error 错误响应
func Error(c *gin.Context, code int, message string) {
c.JSON(http.StatusOK, Response{
Code: code,
Message: message,
})
}
// ErrorWithData 错误响应(带数据)
func ErrorWithData(c *gin.Context, code int, message string, data interface{}) {
c.JSON(http.StatusOK, Response{
Code: code,
Message: message,
Data: data,
})
}
// 常见错误码
const (
CodeSuccess = 200
CodeInvalidParams = 400
CodeUnauthorized = 401
CodeForbidden = 403
CodeNotFound = 404
CodeInternalError = 500
CodeServerError = 500 // 服务器错误(别名)
CodeBindXHSFailed = 1001
CodeCopyNotAvailable = 1002
CodeAlreadyClaimed = 1003
)
// ResponseData 带分页的响应数据结构
type ResponseData struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
Total int64 `json:"total,omitempty"`
Page int `json:"page,omitempty"`
PageSize int `json:"page_size,omitempty"`
}
// ErrorResponse 返回错误响应对象(不直接发送)
func ErrorResponse(message string) Response {
return Response{
Code: CodeInternalError,
Message: message,
}
}
// SuccessResponse 返回成功响应对象(不直接发送)
func SuccessResponse(data interface{}, message string) Response {
return Response{
Code: CodeSuccess,
Message: message,
Data: data,
}
}
// SuccessResponseWithPage 返回带分页的成功响应对象(不直接发送)
func SuccessResponseWithPage(data interface{}, total int64, page, pageSize int, message string) ResponseData {
return ResponseData{
Code: CodeSuccess,
Message: message,
Data: data,
Total: total,
Page: page,
PageSize: pageSize,
}
}