我有以下 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。我试图找出原因,但我没有。有人知道吗?
答案 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")