我在这里跟着一个帖子,想出了这个
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")
}
它有两个问题:
结构是
type Starter struct {
Buttons []Button `json:buttons`
}
type Button struct {
ID int `json:id`
Name string `json:name`
Children bool `json:children`
}
有人可以为此解释一下吗?
答案 0 :(得分:1)
对于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