golang實(shí)現(xiàn)分頁算法實(shí)例代碼
前言
本文主要給大家介紹了關(guān)于golang分頁算法的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
示例代碼如下:
//分頁方法,根據(jù)傳遞過來的頁數(shù),每頁數(shù),總數(shù),返回分頁的內(nèi)容 7個頁數(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 }
測試結(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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Golang 實(shí)現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊
這篇文章主要介紹了Golang 實(shí)現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12使用go連接clickhouse的實(shí)戰(zhàn)操作
這篇文章主要給大家介紹了關(guān)于使用go連接clickhouse的實(shí)戰(zhàn)操作,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用go具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-03-03golang實(shí)現(xiàn)ip訪問限制及提交次數(shù)
在?Web?應(yīng)用中,通常會需要對?IP?訪問進(jìn)行限制以及控制提交次數(shù),本文將使用中間件或者基于?Redis?這樣的緩存服務(wù)來實(shí)現(xiàn),感興趣的可以了解下2024-10-10文字解說Golang Goroutine和線程的區(qū)別
goroutine 是 Go語言中的輕量級線程實(shí)現(xiàn),由 Go 運(yùn)行時(runtime)管理,使用每一個 go 關(guān)鍵字將會額外開啟一個新的協(xié)程 goroutine,今天通過本文給大家介紹下Golang Goroutine和線程的區(qū)別,感興趣的朋友一起看看吧2022-03-03