私は http API を構築しており、すべてのハンドラーが JSON データを返すため、JSON マーシャリングと http 応答を処理するラッパー関数を構築しました (ラッパーの関連セクションとサンプル ハンドラーの 1 つを含めました)。下)。
任意にネストされた構造体を渡す最良の方法は何ですか (構造体には任意の型/フィールド数も含まれます)。現在、文字列キーとインターフェイス{}値を使用したマップに落ち着きました。これは機能しますが、これはこれを行うための最も慣用的な方法ですか?
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
}