Gorm 总是返回具有 nil 值的结构

我正在使用 Gorm 构建一个 Go web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM。问题是 Gorm 总是返回一片结构,其值全部为 nil,尽管数据库已经填充了数据。切片中的结构数量是否合适取决于LIMIT我给出的。


我还尝试使用database/sql内置包直接查询 SQL,在循环内手动插入变量rows.Next(),它没有问题。我已经用 3 个不同的表和 3 个不同的结构(显然)尝试了这个,结果都是一样的。所以我想这是 Gorm 方面的问题。下表中的一个作为示例给出。


结构结构


type gameCenterLog struct {

    tm      time.Time

    seq     int

    uid     int

    partner int

    token   sql.NullString

    bounty  int

    path1   sql.NullString

    path2   sql.NullString

    path3   sql.NullString

    action  sql.NullString

    value1  sql.NullString

    value2  sql.NullString

    value3  sql.NullString

    value4  sql.NullString

    value5  sql.NullString

}

func (log *gameCenterLog) TableName() string {

    return "gamecenter_log"

}

Gorm 查询示例


func testGorm() {

    connString := fmt.Sprintf("host=%v port=%v user=%v password=%v dbname=%v", host, port, user, pass, schema)

    db, err := gorm.Open("postgres", connString)

    if err != nil {

        panic(err.Error())

    }

    defer db.Close()


    var logs []gameCenterLog


    today := time.Now().UTC()

    lastWeek := time.Now().Add(-7 * 24 * time.Hour).UTC()


    db.Debug().Where("tm BETWEEN ? AND ?", lastWeek, today).Order("tm desc").Limit(limit).Find(&logs)

    fmt.Printf("Error: %+v\n", db.Error)

    for _, result := range logs {

        fmt.Printf("%+v\n", result)

    }

}



慕虎7371278
浏览 199回答 1
1回答

扬帆大鱼

您的结构中的所有字段gameCenterlog都是小写的,因此它们不会被导出。非导出字段对反射不可见,因此它们对 Gorm 不可见。如果您将字段大写:type gameCenterLog struct {     Tm      time.Time     Seq     int     Uid     int     ...然后 Gorm 将能够看到它们给出值。Gorm 应该能够找出从 PostgreSQL 中的列名到 Go 中的结构字段的映射,但如果没有,您可以使用gorm:"column:..." 结构标签。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go