You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.1 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. package grmi
  2. import (
  3. "strconv"
  4. )
  5. const (
  6. PageSize = "pageSize"
  7. _PageSize = "_pageSize"
  8. PageNumber = "pageNumber"
  9. _PageNumber = "_pageNumber"
  10. )
  11. type Paging struct {
  12. Number int64
  13. Size int64
  14. }
  15. func NewPaging() *Paging {
  16. return &Paging{Number: 1, Size: 10}
  17. }
  18. func (self *Paging) Offset() int64 {
  19. return (self.Number - 1) * self.Size
  20. }
  21. func (self *Paging) Fill(urlParameters map[string]string) {
  22. size, _ := getPageSize(urlParameters)
  23. number, _ := getPageIndex(urlParameters)
  24. self.Size = size
  25. self.Number = number
  26. }
  27. func getValue(urlParameters map[string]string, names []string, defaultValue int64) (int64, bool) {
  28. for _, name := range names {
  29. if urlParameter, ok := urlParameters[name]; ok {
  30. value, err := strconv.ParseInt(urlParameter, 10, 64)
  31. if err == nil {
  32. return value, true
  33. }
  34. }
  35. }
  36. return defaultValue, false
  37. }
  38. func getPageIndex(urlParameters map[string]string) (int64, bool) {
  39. return getValue(urlParameters, []string{_PageNumber, PageNumber}, 1)
  40. }
  41. func getPageSize(urlParameters map[string]string) (int64, bool) {
  42. return getValue(urlParameters, []string{_PageSize, PageSize}, 1)
  43. }