page.go 709 B

1234567891011121314151617181920212223242526
  1. package page
  2. import (
  3. "gorm.io/gorm"
  4. )
  5. type PageParams struct {
  6. Page int `json:"page" form:"page"`
  7. Size int `json:"size" form:"size"`
  8. Desc string `json:"desc" form:"desc"`
  9. }
  10. // Paginate 使用给定的DB连接执行分页查询
  11. func Paginate[T any](db *gorm.DB, params PageParams, model T) (result []T, total int64, err error) {
  12. var count int64
  13. if err = db.Model(model).Count(&count).Error; err != nil {
  14. return nil, 0, err
  15. }
  16. // 计算偏移量并设置分页大小
  17. offset := (params.Page - 1) * params.Size
  18. // 执行实际分页查询
  19. if err = db.Offset(offset).Limit(params.Size).Order(params.Desc).Find(&result).Error; err != nil {
  20. return nil, 0, err
  21. }
  22. return result, count, nil
  23. }