golang實(shí)現(xiàn)分頁算法實(shí)例代碼
前言
本文主要給大家介紹了關(guān)于golang分頁算法的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
示例代碼如下:
//分頁方法,根據(jù)傳遞過來的頁數(shù),每頁數(shù),總數(shù),返回分頁的內(nèi)容 7個(gè)頁數(shù) 前 1,2,3,4,5 后 的格式返回,小于5頁返回具體頁數(shù)
func Paginator(page, prepage int, nums int64) map[string]interface{} {
var firstpage int //前一頁地址
var lastpage int //后一頁地址
//根據(jù)nums總數(shù),和prepage每頁數(shù)量 生成分頁總數(shù)
totalpages := int(math.Ceil(float64(nums) / float64(prepage))) //page總數(shù)
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
}
測(cè)試結(jié)果如下
func main(){
pageSize := 3
var rsCount int64 = 100
currentPage := 8
res := Paginator(currentPage,pageSize,rsCount)
fmt.Println(res)
}
運(yùn)行結(jié)果如下
map[pages:[6 7 8 9 10] totalpages:34 firstpage:7 lastpage:9 currpage:8]
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
golang值類型轉(zhuǎn)換成[]uint8類型的操作
這篇文章主要介紹了golang值類型轉(zhuǎn)換成[]uint8類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-05-05
Golang實(shí)現(xiàn)不被復(fù)制的結(jié)構(gòu)體的方法
sync包中的許多結(jié)構(gòu)都是不允許拷貝的,因?yàn)樗鼈冏陨泶鎯?chǔ)了一些狀態(tài)(比如等待者的數(shù)量),如果你嘗試復(fù)制這些結(jié)構(gòu)體,就會(huì)在你的?IDE中看到警告,那這是怎么實(shí)現(xiàn)的呢,下文就來和大家詳細(xì)講講2023-03-03
Go語言中利用http發(fā)起Get和Post請(qǐng)求的方法示例
這篇文章主要給大家介紹了關(guān)于Go語言中利用http發(fā)起Get和Post請(qǐng)求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
golang并發(fā)編程中Goroutine 協(xié)程的實(shí)現(xiàn)
Go語言中的協(xié)程是一種輕量級(jí)線程,通過在函數(shù)前加go關(guān)鍵字來并發(fā)執(zhí)行,具有動(dòng)態(tài)棧、快速啟動(dòng)和低內(nèi)存使用等特點(diǎn),本文就來詳細(xì)的介紹一下,感興趣的可以了解一下2024-10-10

