package page import "fmt" const ( DefaultPageSize = 10 DefaultTotal = 0 DefaultCurrent = 1 ) // Pagination 物理分页模型 type Pagination struct { Size int64 `json:"size"` // 每页条目个数 Total int64 `json:"total"` // 数据条目总数 Current int64 `json:"current"` // 当前页码 } // NewPagination 构建分页器 func NewPagination(current, size, total int64) *Pagination { return &Pagination{ Size: size, Total: total, Current: current, } } // DefaultPagination 构建默认分页器 func DefaultPagination() *Pagination { return NewPagination(DefaultCurrent, DefaultPageSize, DefaultTotal) } // Clone 克隆 deep-clone func (p *Pagination) Clone() *Pagination { return NewPagination(p.Current, p.Size, p.Total) } // WithSize 设置每页个数 func (p *Pagination) WithSize(size int64) *Pagination { p.Size = size return p } // WithTotal 设置数据总数 func (p *Pagination) WithTotal(total int64) *Pagination { p.Total = total return p } // WithCurrent 设置当前页码 func (p *Pagination) WithCurrent(current int64) *Pagination { p.Current = current return p } // NextPage 下一页 func (p *Pagination) NextPage() *Pagination { p.Current++ return p } // PrevPage 上一页 func (p *Pagination) PrevPage() *Pagination { p.Current-- return p } // Offset 返回数据库需要的 Offset func (p *Pagination) Offset() int64 { return (p.Current - 1) * p.Size } // Limit 返回数据库需要的 Limit func (p *Pagination) Limit() int64 { return p.Size } func (p *Pagination) String() string { return fmt.Sprintf("[Pagination current: %d, size: %d, total: %d]", p.Current, p.Size, p.Total) }