我跟着这里的一个线程想出了这个
var b Button
queryErr := connection.QueryRow("SELECT id_printer, name, has_children FROM button WHERE id_parent IS NULL;").Scan(&b.ID, &b.Name, &b.Children)
if queryErr != nil {
response, err := json.MarshalIndent(b, "", " ")
fmt.Fprint(w, string(response))
if err != nil {
log.Println("Error on jsonmarshalindent Starter")
}
} else {
log.Println("Error on queryErr starter")
log.Println(queryErr)
fmt.Fprint(w, "Error getting starter button")
}
它有两个问题:
- 它打破了 b.Children
- 我不知道如何动态地创建它。例如,查询返回 3 行,但这取决于公司的客户,它可以是 3 或任何数字。
结构是
type Starter struct {
Buttons []Button `json:buttons`
}
type Button struct {
ID int `json:id`
Name string `json:name`
Children bool `json:children`
}
有人可以阐明这一点吗?
最佳答案
对于bool,取决于实际列的类型。如果它不是 bool 值,则不会直接映射。
可能需要先存入一个临时变量,然后翻译赋值给Button中的字段进行匹配。
至于读取所有行,这里有一个改编自 docs 的示例.
您使用 Query 而不是 QueryRow 来获取所有行。
rows, err := db.Query("SELECT id_printer, name, has_children FROM button WHERE id_parent IS NULL;")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
var buttons []Button
for rows.Next() {
var b Button
if err := rows.Scan(&b.ID, &b.Name, &b.Children); err != nil {
log.Fatal(err)
}
buttons = append(buttons,b)
}
// At this point, you have all your rows in the "buttons" variable
关于database - 从 PostGres 数据库获取结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145775/