golang的一个分页方法

时间:2022-05-05
本文章向大家介绍golang的一个分页方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

需要做一分页。。就做了个方法,beego里的例子太麻烦了。还是弄个简单的吧,上代码。。

//分页方法,根据传递过来的页数,每页数,总数,返回分页的内容 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  
}  

html是这样的

<div class="am-cf"> 
共{{.totals}}条记录 共记{{.paginator.totalpages}} 页 当前页  {{.paginator.currpage}}  
<div class="am-fr"> 
 <ul class="am-pagination"> 
 <li class=""><a href="/clubadmin/topics/{{.paginator.firstpage}}">«</a></li> 
  {{range $index,$page := .paginator.pages}}  
 <li  {{if eq $.paginator.currpage $page }}class="am-active"{{end}}><a href="/clubadmin/topics/{{$page}}">{{$page}}</a></li> 
  {{end}}  
 <li><a href="/clubadmin/topics/{{.paginator.lastpage}}">»</a></li> 
 </ul> 
</div> 
t;/div> 

controller里是这样的

res := models.Paginator(pa, pre_page, totals)  
this.Data["paginator"] = res