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()) } **/
如果你有什么意见,请给我留言。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。