1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
   | import ( 	"gorm.io/gorm" )
 
  type PageResults struct { 	Total    int64       `json:"total"`  	PageNum  int         `json:"page"`   	PageSize int         `json:"size"`   	Pages    int         `json:"pages"`  	Data     interface{} `json:"data"`   }
 
  type PageInfo struct { 	Page int `json:"page" form:"page"` 	Size int `json:"Size" form:"size"` }
 
  func (p *PageInfo) check() { 	if p.Page <= 0 { 		p.Page = 1 	} 	if p.Size <= 0 { 		p.Size = 10 	} }
 
  func (p *PageInfo) Paginate() func(db *gorm.DB) *gorm.DB { 	p.check() 	return func(db *gorm.DB) *gorm.DB { 		offset := (p.Page - 1) * p.Size 		return db.Offset(offset).Limit(p.Size) 	} }
 
  func (p *PageInfo) BuildPageResults(data interface{}, total int64) *PageResults { 	t := int(total) 	pages := t / p.Size 	if t%p.Size != 0 { 		pages++ 	} 	return &PageResults{ 		Total:    total, 		PageNum:  p.Page, 		PageSize: p.Size, 		Pages:    pages, 		Data:     data, 	} }
   |