为了账号安全,请及时绑定邮箱和手机立即绑定

从 PostGres DB 获取结构

从 PostGres DB 获取结构

Go
噜噜哒 2021-11-29 15:32:20
我在这里关注了一个线程并想出了这个var b ButtonqueryErr := 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`}有人可以对此有所了解吗?
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

对于 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


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信