golang实现分页算法实例代码

 更新时间:2018年09月12日 11:01:27   作者:JimPang  
这篇文章主要给大家介绍了关于golang实现分页算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

本文主要给大家介绍了关于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]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • golang 如何获取pem格式RSA公私钥长度

    golang 如何获取pem格式RSA公私钥长度

    这篇文章主要介绍了golang 如何获取pem格式RSA公私钥长度操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言常见错误之any没传递任何信息解决分析

    Go语言常见错误之any没传递任何信息解决分析

    Go语言,由于其高效强大的并行处理能力和优雅简单的设计哲学,一直以来都是编程世界的宠儿,然而,对于一些Go新手和甚至熟悉Go的程序员也可能会遇到一个常见的错误: any没传递任何信息,那么,如何规避这个错误,本文将揭示其中的秘密
    2024-01-01
  • Go逃逸分析示例详解

    Go逃逸分析示例详解

    这篇文章主要为大家介绍了Go逃逸分析示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Golang迭代如何在Go中循环数据结构使用详解

    Golang迭代如何在Go中循环数据结构使用详解

    这篇文章主要为大家介绍了Golang迭代之如何在Go中循环数据结构使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Go并发的方法之goroutine模型与调度策略

    Go并发的方法之goroutine模型与调度策略

    在go中,协程co-routine被改为goroutine,一个goroutine只占几kb,因此可以有大量的goroutine存在,另一方面goroutine 的调度器非常灵活,本文给大家介绍下Go并发的方法之goroutine模型与调度策略,感兴趣的朋友一起看看吧
    2021-11-11
  • golang 随机数的两种方式

    golang 随机数的两种方式

    本文主要介绍了golang 随机数的两种方式,一种是伪随机,另一种是真随机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Go语言sync.Cond基本使用及原理示例详解

    Go语言sync.Cond基本使用及原理示例详解

    这篇文章主要为大家介绍了Go语言sync.Cond基本使用及原理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Go语言常见数据结构的实现详解

    Go语言常见数据结构的实现详解

    这篇文章主要为大家学习介绍了Go语言中的常见数据结构(channal、slice和map)的实现,文中的示例代码简洁易懂,需要的可以参考一下
    2023-07-07
  • 一文带你了解Golang中的泛型

    一文带你了解Golang中的泛型

    泛型是一种可以编写独立于使用的特定类型的代码的方法,可以通过编写函数或类型来使用一组类型中的任何一个,下面就来和大家聊聊Golang中泛型的使用吧
    2023-07-07
  • Golang新提案:panic 能不能加个 PanicError?

    Golang新提案:panic 能不能加个 PanicError?

    这篇文章主要为大家介绍了Golang的新提案关于panic能不能加个PanicError的问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论