下面是可以实现该功能的代码:
func getData(db *gorm.DB, perPage int, pageNum int, a string) ([]map[string]interface{}, error) {
var data []map[string]interface{}
offset := (pageNum - 1) * perPage
err := db.Table("table_name").
Where("A = ?", a).
Limit(perPage).Offset(offset).
Find(&data).Error
if err != nil {
return nil, err
}
return data, nil
}
其中,db
是一个 *gorm.DB
数据库对象,perPage
和 pageNum
分别表示每页数据量和查询的页码数,a
是要匹配的字段 A 的值。
函数中,我们首先计算出偏移量 offset
,然后使用 GORM 提供的链式调用方法进行查询,通过 Table()
指定要查询的表名,使用 Where()
来过滤条件,最后使用 Limit()
和 Offset()
指定查询的限制条件(这里是每页 perPage
条数据,从第 offset
条数据开始查询),将结果保存到 data
中。最后,如果查询出错,则返回错误信息;否则,返回 data
数组。
需要注意的是,返回的 []map[string]interface{}
类型是指每个元素都是 map
类型,其中键是字符串类型,值可以是任意类型。在这种情况下,我们可以将查询结果中的每行数据都转换为 map
类型并存储到 data
数组中。