Golang 的分页

最近 为了完成 爱看 的分页功能,自己写了一个分页功能小类,没有仔细推敲函数的合理性和代码的优雅性,完全是为了实现功能的东西,要赶出来。废话不说,直接上代码:


package lib

import (
//"fmt"
)

type Pagination interface {
CurrentPage() int
PageSize() int
TotalPage() int
TotalCount() int
HasPrev() bool
HasNext() bool
PrevPage() int
NextPage() int
RangePage() []int
}

type pagination struct {
currentPage int // 当前页
pageSize    int // 每页几行
totalPage   int // 总页数
totalCount  int // 总行数
rangeCount  int //区间页索引个数
}

func NewPaginationR(currentPage, pageSize, totalCount, rangeCount int) Pagination {
p := &pagination{
currentPage: currentPage,
pageSize:    pageSize,
totalCount:  totalCount,
rangeCount:  rangeCount,
}
p.setTotalPage()
return p
}

func NewPagination(currentPage, pageSize, totalCount int) Pagination {
p := &pagination{
currentPage: currentPage,
pageSize:    pageSize,
totalCount:  totalCount,
rangeCount:  8,
}
p.setTotalPage()
return p
}

func (p *pagination) setTotalPage() {
totalPage := p.TotalCount() / p.PageSize()
if p.TotalCount()%p.PageSize() == 0 {
p.totalPage = totalPage
} else {
p.totalPage = totalPage + 1
}
}

func (p pagination) CurrentPage() int {
if p.currentPage <= 0 {
p.currentPage = 1
}
return p.currentPage
}

func (p pagination) PageSize() int {
return p.pageSize
}

func (p pagination) TotalPage() int {
return p.totalPage
}

func (p pagination) TotalCount() int {
return p.totalCount
}

func (p pagination) HasPrev() bool {
if p.currentPage <= p.totalPage && p.currentPage > 1 {
return true
} else {
return false
}
}

func (p pagination) HasNext() bool {
if p.currentPage < p.totalPage {
return true
}
return false
}

func (p pagination) PrevPage() int {
if p.currentPage-1 > 0 {
return p.currentPage - 1
} else {
return 1
}
}

func (p pagination) NextPage() int {
if p.currentPage+1 <= p.totalPage {
return p.currentPage + 1
}
return p.currentPage
}

func (p pagination) RangePage() []int {
ret := make([]int, 0)
if p.totalPage > 0 {
index := 0
if p.rangeCount >= p.totalPage {
for i := 1; i <= p.totalPage; i++ {
ret = append(ret, i)
index++
}
} else {
if p.currentPage+p.rangeCount-1 <= p.totalPage {
for i := p.currentPage; i <= p.currentPage+p.rangeCount-1; i++ {
ret = append(ret, i)
index++
}
} else {
start := p.currentPage - (p.rangeCount - (p.totalPage - p.currentPage + 1))
if start <= 0 {
start = 1
}
for i := start; i <= p.totalPage; i++ {
ret = append(ret, i)
index++
}
}
}
}
return ret
}

/**
func main() {
p := NewPagination(1, 20, 10000)
fmt.Printf("上一页:%d \n", p.PrevPage())
fmt.Printf("下一页:%d \n", p.NextPage())
fmt.Printf("当前页:%d \n", p.CurrentPage())
fmt.Printf("每页记录数:%d \n", p.PageSize())
fmt.Printf("总记录数:%d \n", p.TotalCount())
fmt.Printf("总页数:%d \n", p.TotalPage())
//fmt.Println(p.RangePage())
}
**/

如果你有什么意见,请给我留言。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。