You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang 如何正确返回包含status状态字段的JSON响应体

实现方案

1. 定义通用标准化响应结构体

你可以先在项目公共工具层定义可复用的响应结构,方便所有接口统一使用:

// ApiResponse 统一接口响应结构
type ApiResponse struct {
    Status     string      `json:"status"`
    StatusCode int         `json:"statusCode"`
    Data       interface{} `json:"data"`
}

// SuccessResponse 快速生成成功响应的工具方法
func SuccessResponse(data interface{}) ApiResponse {
    return ApiResponse{
        Status:     "success",
        StatusCode: 200,
        Data:       data,
    }
}

// ErrorResponse 快速生成错误响应的工具方法,可根据业务需求扩展
func ErrorResponse(code int, errMsg string) ApiResponse {
    return ApiResponse{
        Status:     "fail",
        StatusCode: code,
        Data:       errMsg,
    }
}

2. 修改原有接口逻辑

修正原有代码直接返回gorm查询对象的问题,组装标准化结构后再输出:

func getUser(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    var user []User
    result := db.Find(&user)
    // 异常判断逻辑可根据业务需求调整
    if result.Error != nil {
        w.WriteHeader(http.StatusInternalServerError)
        _ = json.NewEncoder(w).Encode(ErrorResponse(500, "用户数据查询失败"))
        return
    }
    // 组装你需要的标准化结构返回
    _ = json.NewEncoder(w).Encode(SuccessResponse(user))
}

补充说明

  • 结构体的json标签保证序列化后的字段名和你要求的格式完全匹配
  • Data字段使用interface{}类型可以兼容所有业务数据类型,无需为不同接口单独定义响应结构
  • 封装为工具方法后所有接口都可以直接调用,避免重复编写结构组装代码

内容的提问来源于stack exchange,提问作者Ramesh S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:54:03