Golang记录ID为0

pro*_*pro 2 postgresql go

我有以下汽车模型和汽车切片:

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

var cars []Car
Run Code Online (Sandbox Code Playgroud)

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

create table cars (id serial, name varchar);
Run Code Online (Sandbox Code Playgroud)

并保存了几个记录:

insert into cars (name) values ('Toyota');
insert into cars (name) values ('Lexus');
Run Code Online (Sandbox Code Playgroud)

使用增量整数ID 1和2成功创建记录.

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

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

for _, car := range cars {
    fmt.Println(car)
}
Run Code Online (Sandbox Code Playgroud)

虽然有回复,但每条记录的ID都是0.我试图找出原因,但我无法做到.任何人有任何想法?

Him*_*shu 5

database/sql package不提供将数据直接扫描到结构,您应该迭代从数据库查询返回的行,然后将数据扫描到struct中:

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)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用sql包名称sqlx的扩展名,它将使您直接将结果扫描到结构片中:

cars := []cars{}
db.Select(&cars, "SELECT * from cars")
Run Code Online (Sandbox Code Playgroud)