Skip to content

Instantly share code, notes, and snippets.

@gingerhot
Forked from tejainece/paginator.go
Created September 5, 2017 02:39
Show Gist options
  • Save gingerhot/81282ede9a461df5c2a4ef9ff9f9fa67 to your computer and use it in GitHub Desktop.
Save gingerhot/81282ede9a461df5c2a4ef9ff9f9fa67 to your computer and use it in GitHub Desktop.
Paginator in Golang
package main
import (
"math"
"fmt"
)
type (
Data struct {
X int
}
Paginator struct {
Content []interface{}
PerPage int
}
Page struct {
PageNum int
StartIdx int
EndIdx int
Content []interface{}
HasNext bool
HasPrevious bool
TotalPages int
PerPage int
}
)
func (p Paginator) GetPage(page_num int) Page {
per_page := p.PerPage
total := len(p.Content)
total_pages := int(math.Ceil(float64(total) / float64(p.PerPage)))
fmt.Println(per_page)
fmt.Println(page_num)
fmt.Println(total_pages)
fmt.Println(total)
page := Page{}
paged_list := make([]interface{}, per_page)
if page_num < total_pages {
if per_page*(page_num+1) <= total {
paged_list = p.Content[per_page*page_num : per_page*(page_num+1)]
page = Page{page_num, per_page*page_num, per_page*(page_num+1) - 1, paged_list, true, page_num != 0, total_pages, per_page}
} else {
paged_list = p.Content[per_page*page_num:]
page = Page{page_num, per_page*page_num, total - 1, paged_list, false, page_num != 0, total_pages, per_page}
}
}
return page
}
func main() {
dlist := make([]Data, 0)
for i := 0; i < 40; i++ {
d := Data{i}
dlist = append(dlist, d)
}
b := make([]interface{}, len(dlist))
for i := range dlist {
b[i] = dlist[i]
}
p := Paginator{b, 5}
c := p.GetPage(1)
fmt.Println(c)
e := make([]Data, len(c.Content))
for i := range c.Content {
e[i] = c.Content[i].(Data)
}
fmt.Println(e)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment