pagination.go 630 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package pagination
  2. type Pagination interface {
  3. OffsetLimit() *offsetLimit
  4. Page() *page
  5. }
  6. type page struct {
  7. Now uint32
  8. Size uint32
  9. }
  10. type offsetLimit struct {
  11. Offset uint32
  12. Limit uint32
  13. }
  14. type custom struct {
  15. Now uint32
  16. Size uint32
  17. }
  18. func (p *custom) OffsetLimit() *offsetLimit {
  19. pageNow := p.Now
  20. if pageNow > 1 {
  21. pageNow = pageNow - 1
  22. } else {
  23. pageNow = 0
  24. }
  25. return &offsetLimit{
  26. Offset: pageNow * p.Size,
  27. Limit: p.Size,
  28. }
  29. }
  30. func (p *custom) Page() *page {
  31. return &page{
  32. Now: p.Now,
  33. Size: p.Size,
  34. }
  35. }
  36. func New(now, size uint32) Pagination {
  37. return &custom{
  38. Now: now,
  39. Size: size,
  40. }
  41. }