106 lines
3.0 KiB
Go
106 lines
3.0 KiB
Go
package http
|
||
|
||
import (
|
||
"encoding/json"
|
||
"net/http"
|
||
"time"
|
||
)
|
||
|
||
// Response 标准响应结构
|
||
type Response struct {
|
||
Code int `json:"code"` // 业务状态码,0表示成功
|
||
Message string `json:"message"` // 响应消息
|
||
Timestamp int64 `json:"timestamp"` // 时间戳
|
||
Data interface{} `json:"data"` // 响应数据
|
||
}
|
||
|
||
// PageResponse 分页响应结构
|
||
type PageResponse struct {
|
||
Code int `json:"code"`
|
||
Message string `json:"message"`
|
||
Timestamp int64 `json:"timestamp"`
|
||
Data *PageData `json:"data"`
|
||
}
|
||
|
||
// PageData 分页数据
|
||
type PageData struct {
|
||
List interface{} `json:"list"` // 数据列表
|
||
Total int64 `json:"total"` // 总记录数
|
||
Page int `json:"page"` // 当前页码
|
||
PageSize int `json:"pageSize"` // 每页大小
|
||
}
|
||
|
||
// writeJSON 写入JSON响应(公共方法)
|
||
// httpCode: HTTP状态码(200表示正常,500表示系统错误等)
|
||
// code: 业务状态码(0表示成功,非0表示业务错误)
|
||
// message: 响应消息
|
||
// data: 响应数据
|
||
func writeJSON(w http.ResponseWriter, httpCode, code int, message string, data interface{}) {
|
||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||
w.WriteHeader(httpCode)
|
||
|
||
response := Response{
|
||
Code: code,
|
||
Message: message,
|
||
Timestamp: time.Now().Unix(),
|
||
Data: data,
|
||
}
|
||
|
||
json.NewEncoder(w).Encode(response)
|
||
}
|
||
|
||
// Success 成功响应(公共方法)
|
||
// w: ResponseWriter
|
||
// data: 响应数据,可以为nil
|
||
// message: 响应消息(可选),如果为空则使用默认消息 "success"
|
||
//
|
||
// 使用方式:
|
||
//
|
||
// Success(w, data) // 只有数据,使用默认消息 "success"
|
||
// Success(w, data, "查询成功") // 数据+消息
|
||
func Success(w http.ResponseWriter, data interface{}, message ...string) {
|
||
msg := "success"
|
||
if len(message) > 0 && message[0] != "" {
|
||
msg = message[0]
|
||
}
|
||
writeJSON(w, http.StatusOK, 0, msg, data)
|
||
}
|
||
|
||
// SuccessPage 分页成功响应(公共方法)
|
||
// w: ResponseWriter
|
||
// list: 数据列表
|
||
// total: 总记录数
|
||
// page: 当前页码
|
||
// pageSize: 每页大小
|
||
// message: 响应消息(可选),如果为空则使用默认消息 "success"
|
||
func SuccessPage(w http.ResponseWriter, list interface{}, total int64, page, pageSize int, message ...string) {
|
||
msg := "success"
|
||
if len(message) > 0 && message[0] != "" {
|
||
msg = message[0]
|
||
}
|
||
|
||
pageData := &PageData{
|
||
List: list,
|
||
Total: total,
|
||
Page: page,
|
||
PageSize: pageSize,
|
||
}
|
||
|
||
writeJSON(w, http.StatusOK, 0, msg, pageData)
|
||
}
|
||
|
||
// Error 错误响应(公共方法)
|
||
// w: ResponseWriter
|
||
// code: 业务错误码,非0表示业务错误
|
||
// message: 错误消息
|
||
func Error(w http.ResponseWriter, code int, message string) {
|
||
writeJSON(w, http.StatusOK, code, message, nil)
|
||
}
|
||
|
||
// SystemError 系统错误响应(返回HTTP 500)(公共方法)
|
||
// w: ResponseWriter
|
||
// message: 错误消息
|
||
func SystemError(w http.ResponseWriter, message string) {
|
||
writeJSON(w, http.StatusInternalServerError, 500, message, nil)
|
||
}
|