背景:
最近在研究goframe,框架整体比较强大、规范;在此基础上开发,遇到了分页情况,看goframe介绍的分页是返回视图层的也就是html,我这边是前后端分离,因此不需要返回html,就自己简单的封装了下,我看了网上针对分页的机制,没有很好的封装,我这边按照我自己的理解进行封装一下。
// IPage
// @Description: 分页结构体
type IPage struct {Records interface{} `json:"records" dc:"数据"`PageNum int `json:"pageNum" in:"query" d:"1" v:"min:0#分页号码错误" dc:"分页号码,默认1"`PageSize int `json:"pageSize" in:"query" d:"10" v:"max:50#分页数量最大50条" dc:"分页数量,最大50"`Total int `dc:"总数"`
}// Page
//
// @Author zhaosy
// @Description: 分页 供包调用的,方便进行组装分页数据
// @date 2024-07-09 09:58:20
func Page(data interface{}, pageNum, pageSize, count int) *IPage {return &IPage{Records: data,PageNum: pageNum,PageSize: pageSize,Total: count,}
}// PageRecords
//
// @Author zhaosy
// @Description: 分页, IPage使用
// @date 2024-07-09 10:07:44
func (p *IPage) PageRecords(data interface{}, count int) *IPage {p.Records = datap.Total = countreturn p
}
这是我定义的分页结构体,如何结合框架使用呢?
type DeviceListReq struct {g.Meta `path:"/device/queryDeviceList" method:"post" tag:"设备信息" summary:"设备列表" dc:"设备列表信息" `//分页信息api.IPage
}
在controller层进行处理:
func (c *ControllerV1) DeviceList(ctx context.Context, req *v1.DeviceListReq) (res *result.ResultRes, err error) {//r := ghttp.RequestFromCtx(ctx) //获取request对象//r := g.RequestFromCtx(ctx)list := []do.DeviceInfo{} m := dao.DeviceInfo.Ctx(ctx).Page(req.PageNum, req.PageSize)m.Scan(&list)count, _ := m.Count()//return result.Success(req.IPage.PageRecords(list, count)), nil//这样写也可以return result.Success(req.PageRecords(list, count)), nil}
result可以参考我上一篇文章