从 PostGres DB 获取结构

我在这里关注了一个线程并想出了这个


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`

}

有人可以对此有所了解吗?


噜噜哒
浏览 141回答 1
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 []Buttonfor 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go