我正在使用 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:..."
结构标签。
- 1 回答
- 0 关注
- 198 浏览
添加回答
举报
0/150
提交
取消