概括
我正在尝试将多个 postgres 表中的数据写入嵌套的 Go 结构,以便在我的 Web 应用程序中返回对 GET 请求的单个 json 响应。
问题
- 从 Go 最佳实践的角度来看,我声明嵌套结构的方式是合理的,还是有理由避免这种方法并以另一种方式来做?
- 我在步骤 3中做错了什么来阻止我的代码工作?(我担心答案是“一切”)
到目前为止我所拥有的
- 我已经声明了我的结构
type MainObject struct {
SubObjects []struct {
SpecificDetail string `json:"specific-detail"`
} `json:"sub-object"`
...(other []structs)...
}
- 我已经从表中检索了行
func getMainObjectHandler(w http.ResponseWriter, r *http.Request) {
...(database connnection)...
MainObjectID := r.URL.Query().Get("moid")
if MainObjectID != "null" {
NewMainObject := MainObject{}
SubObjectDetail_rows, err := db.Query("SELECT specific_detail from the_table WHERE moid= '" + MainObjectID + "'")
if err != nil {
log.Fatalf("could not execute query: %v", err)
}
...(other db.Query rows)...
- 我尝试(但失败)将行数据构建到结构中。
for SubObjectDetail_rows.Next() {
SpecificDetail := NewMainObject.SubObject.SpecificDetail{}
SubObjectDetail_rows.Scan(&SpecificDetail)
SubObject = append(SubObject, SpecificDetail)
}
NewMainObject = append(MainObject, SubObject)
defer persona_rows.Close()
- 最后,我设置了 Marshal 并写入。
NMOListBytes, err := json.Marshal(NewMainObject)
if err != nil {
fmt.Println(fmt.Errorf("Error: %v", err))
w.WriteHeader(http.StatusInternalServerError)
return
}
w.Write(NMOListBytes)