go语言分页 gin框架分页

 paginate分页函数封装

// Paginate 分页封装
func Paginate(current int,pageSize int) func(db *gorm.DB) *gorm.DB {
	return func (db *gorm.DB) *gorm.DB {
		if current == 0 {
			current = 1
		}
		switch {
		case pageSize > 100:
			pageSize = 100
		case pageSize <= 0:
			pageSize = 10
		}
		offset := (current - 1) * pageSize
		return db.Offset(offset).Limit(pageSize)
	}
}

使用方法

func GetRoleList(query *request.Pagination) (err error, total int64, list []model.Role) {
	db := global.GvaDb.Model(&model.Role{})
	err = db.Where("deleted_at is null").Count(&total).Error
	if err != nil {
		return err, 0, nil
	}
	err = db.Scopes(utils.Paginate(query.Current, query.PageSize)).Order("created_at desc").Find(&list).Error
	return err, total, list
}

因为分页经常会用到,所以这里推荐将分页封装成一个结构体

type Pagination struct {
	Current  int `json:"current" form:"page"`      // 页码
	PageSize int `json:"pageSize" form:"pageSize"` // 每页大小
}

猜你喜欢

转载自blog.csdn.net/qq_48626761/article/details/127416639