如何使用Go Fiber搭配GORM获取PostgreSQL数据库中的最新数据
你当前的代码会返回表中所有Humid记录,且默认按主键Id升序排列,无法优先获取最新插入的数据。需要通过GORM的Order方法按CreateAt字段倒序排列,结合Limit限制返回数量即可实现需求,同时建议补充错误捕获逻辑避免接口异常无提示。
场景1:只获取最新的1条湿度数据
func WebsoValue(c *fiber.Ctx) error { var latestHumid Humid // 按创建时间倒序,取第一条 err := DB.Order("create_at desc").First(&latestHumid).Error if err != nil { // 可根据业务需求调整错误响应逻辑,比如无数据时返回404 return c.Status(fiber.StatusNotFound).JSON(fiber.Map{ "error": "未查询到湿度数据", }) } return c.JSON(latestHumid) }
场景2:获取所有数据,按时间从新到旧排列
func WebsoValue(c *fiber.Ctx) error { var device []Humid // 按创建时间倒序排列所有记录 err := DB.Order("create_at desc").Find(&device).Error if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": "查询数据失败", }) } return c.JSON(device) }
注意事项
如果你的PostgreSQL表中存储时间的字段名和结构体字段CreateAt的蛇形映射结果create_at不一致,需要给结构体字段加GORM标签指定列名:
type Humid struct { Id int Sensor_id int Value float32 CreateAt time.Time `gorm:"column:你的实际时间字段名"` }
如果需要固定返回最新的N条数据,可在Order方法后追加Limit(N),比如Limit(10)就是返回最新的10条记录。
内容的提问来源于stack exchange,提问作者Ahmad Hidayat
相关产品推荐
相关产品推荐

