Golang记录ID为0

时间:2018-09-01 13:06:05

标签: postgresql go

我有以下 Car 模型和 cars 切片:

type Car struct {
    ID     int    `json:"id"`
    Name  string `json:"title"`
}

var cars []Car

在Postgres数据库上,我创建了一个汽车表来保存汽车记录。

create table cars (id serial, name varchar);

并保存了几条汽车记录:

insert into cars (name) values ('Toyota');
insert into cars (name) values ('Lexus');

已成功创建具有递增整数ID 1和2的记录。

在我的Go服务器中,我正在进行以下查询以获取汽车记录:

db.Query("SELECT * from cars").Rows(&cars)

for _, car := range cars {
    fmt.Println(car)
}

尽管有一个响应,但每条记录的ID为0。我试图找出原因,但我没有。有人知道吗?

1 个答案:

答案 0 :(得分:5)

database/sql软件包不提供直接将数据扫描到结构的功能,您应该遍历数据库查询返回的行,然后按以下方式将数据扫描到结构中:

var cars []cars
for rows.Next() {
        var car cars
        err = rows.Scan(&c.ID, &c.Name)
        if err != nil {
                log.Fatalf("Scan: %v", err)
        }
        cars = append(cars, car)
}
fmt.Println(cars)

或者您可以将扩展名用于SQL软件包名称sqlx,这将使您可以直接将结果扫描到struct的切片中,如下所示:

cars := []cars{}
db.Select(&cars, "SELECT * from cars")