gpt4 book ai didi

postgresql - API 仅返回嵌套结构的最后一行

转载 作者:IT王子 更新时间:2023-10-29 02:00:40 25 4
gpt4 key购买 nike

我已经构建了一个 Golang REST API。除了从数据库中获取所有内容的 GET 之外,其他 HTTP 动词也能正常工作。

我有一个模型的嵌套结构,如下所示:

type Config struct {
ID int `json:"id"`
Name string `json:"name,omitempty"`
Data *Data `json:"data,omitempty"`
}

type Data struct {
Host string `json:"host,omitempty"`
Database string `json:"database,omitempty"`
Password string `json:"password,omitempty"`
Username string `json:"username,omitempty"`
Engine string `json:"engine,omitempty"`
}

我对数据进行 JSON 解码。请看下面的代码:

模型.go

func List(db *sql.DB, start, count int) ([]Config, error) {
var dt string
var c Config
rows, err := db.Query(
"SELECT * FROM configs LIMIT $1 OFFSET $2",
count, start)

if err != nil {
return nil, err
}

defer rows.Close()

configs := []Config{}

for rows.Next() {
//var c Config
if err := rows.Scan(&c.ID, &c.Name, &dt); err != nil {
return nil, err
}
json.Unmarshal([]byte(dt), &c.Data)
// for _, p := range c.Data {
// configs = append(configs, c)
// }
configs = append(configs, c)
}

return configs, nil
}

controller.go

func (a *App) getConfigs(w http.ResponseWriter, r *http.Request) {
count, _ := strconv.Atoi(r.FormValue("count"))
start, _ := strconv.Atoi(r.FormValue("start"))

if count > 10 || count < 1 {
count = 10
}
if start < 0 {
start = 0
}

configs, err := List(a.DB, start, count)
fmt.Print(configs)

if err != nil {
fatalError(w, http.StatusInternalServerError, err.Error())
return
}

jsonResponse(w, http.StatusOK, configs)
}

当我到达 get 端点时,我得到以下信息:

[
{
"id": 2,
"name": "test2",
"data": {
"host": "newhosty",
"database": "locau",
"password": "poy",
"username": "psq",
"engine": "dgnewy"
}
},
{
"id": 3,
"name": "test3",
"data": {
"host": "newhosty",
"database": "locau",
"password": "poy",
"username": "psq",
"engine": "dgnewy"
}
},
{
"id": 4,
"name": "test39",
"data": {
"host": "newhosty",
"database": "locau",
"password": "poy",
"username": "psq",
"engine": "dgnewy"
}
}
]

如您所见,对于所有 id,json 的 data 部分都是重复的。只有 nameid 按预期工作。我希望每个数据都不同,因为它在数据库中。看起来它只选择数据部分的最后一行。

我做错了什么吗?

最佳答案

我通过将 Data *Data 替换为 Data Data 来修复此问题。问题是当 json.Unmarshal 填充 c.Data 时,它发现其中已经有一个结构并覆盖它。

关于postgresql - API 仅返回嵌套结构的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56205983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com