我正在构建一个 http api,我的每个处理程序都返回 JSON 数据,所以我构建了一个处理 JSON 编组和 http 响应的包装器函数(我已经包含了包装器中的相关部分以及示例处理程序之一以下)。
传递任意嵌套结构的最佳方式是什么(结构还包含任意类型/字段数量)。现在我已经确定了一个带有字符串键和 interface{} 值的地图。这行得通,但这是最惯用的方法吗?
result := make(map[string]interface{})
customerList(httpRequest, &result)
j, err := json.Marshal(result)
if err != nil {
log.Println(err)
errs := `{"error": "json.Marshal failed"}`
w.Write([]byte(errs))
return
}
w.Write(j)
func customerList(req *http.Request, result *map[string]interface{}) {
data, err := database.RecentFiftyCustomers()
if err != nil {
(*result)["error"] = stringifyErr(err, "customerList()")
return
}
(*result)["customers"] = data//data is a slice of arbitrarily nested structs
}