为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕虎7371278 2023-03-21 14:55:05
我正在使用 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)    }}
查看完整描述

1 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

您的结构中的所有字段gameCenterlog都是小写的,因此它们不会被导出。非导出字段对反射不可见,因此它们对 Gorm 不可见。

如果您将字段大写:

type gameCenterLog struct {
    Tm      time.Time
    Seq     int
    Uid     int
    ...

然后 Gorm 将能够看到它们给出值。Gorm 应该能够找出从 PostgreSQL 中的列名到 Go 中的结构字段的映射,但如果没有,您可以使用gorm:"column:..." 结构标签。


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信