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
相关产品推荐
相关产品推荐

