使用golang怎么实现一个分页算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

示例代码如下:

//分页方法,根据传递过来的页数,每页数,总数,返回分页的内容 7个页数 前 1,2,3,4,5 后 的格式返回,小于5页返回具体页数
func Paginator(page, prepage int, nums int64) map[string]interface{} {

 var firstpage int //前一页地址
 var lastpage int //后一页地址
 //根据nums总数,和prepage每页数量 生成分页总数
 totalpages := int(math.Ceil(float64(nums) / float64(prepage))) //page总数
 if page > totalpages {
  page = totalpages
 }
 if page <= 0 {
  page = 1
 }
 var pages []int
 switch {
 case page >= totalpages-5 && totalpages > 5: //最后5页
  start := totalpages - 5 + 1
  firstpage = page - 1
  lastpage = int(math.Min(float64(totalpages), float64(page+1)))
  pages = make([]int, 5)
  for i, _ := range pages {
   pages[i] = start + i
  }
 case page >= 3 && totalpages > 5:
  start := page - 3 + 1
  pages = make([]int, 5)
  firstpage = page - 3
  for i, _ := range pages {
   pages[i] = start + i
  }
  firstpage = page - 1
  lastpage = page + 1
 default:
  pages = make([]int, int(math.Min(5, float64(totalpages))))
  for i, _ := range pages {
   pages[i] = i + 1
  }
  firstpage = int(math.Max(float64(1), float64(page-1)))
  lastpage = page + 1
  //fmt.Println(pages)
 }
 paginatorMap := make(map[string]interface{})
 paginatorMap["pages"] = pages
 paginatorMap["totalpages"] = totalpages
 paginatorMap["firstpage"] = firstpage
 paginatorMap["lastpage"] = lastpage
 paginatorMap["currpage"] = page
 return paginatorMap
}

测试结果如下

func main(){
 pageSize := 3 
 var rsCount int64 = 100
 currentPage := 8
 res := Paginator(currentPage,pageSize,rsCount)
 fmt.Println(res) 
}

运行结果如下

map[pages:[6 7 8 9 10] totalpages:34 firstpage:7 lastpage:9 currpage:8]

另外有需要云服务器可以了解下风纳云fengnayun.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。