{"id":19621627,"url":"https://github.com/pkg6/go-paginate","last_synced_at":"2026-05-16T19:04:00.412Z","repository":{"id":176686850,"uuid":"642837997","full_name":"pkg6/go-paginate","owner":"pkg6","description":"About A simple way to implement paginate in Golang.","archived":false,"fork":false,"pushed_at":"2023-10-23T02:10:10.000Z","size":26,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-09T11:41:03.595Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pkg6.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-19T13:08:24.000Z","updated_at":"2023-05-19T21:44:37.000Z","dependencies_parsed_at":"2023-10-20T17:47:06.454Z","dependency_job_id":"d994d99a-46d9-4ef4-99d8-bf30cffce28a","html_url":"https://github.com/pkg6/go-paginate","commit_stats":null,"previous_names":["pkg6/go-paginate"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkg6%2Fgo-paginate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkg6%2Fgo-paginate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkg6%2Fgo-paginate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkg6%2Fgo-paginate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pkg6","download_url":"https://codeload.github.com/pkg6/go-paginate/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240917723,"owners_count":19878308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T11:23:46.531Z","updated_at":"2026-05-16T19:04:00.349Z","avatar_url":"https://github.com/pkg6.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"A simple way to implement pagination in Golang.\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/pkg6/go-paginate)](https://goreportcard.com/report/github.com/pkg6/go-paginate)\n[![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-blue?logo=go\u0026logoColor=white)](https://pkg.go.dev/github.com/pkg6/go-paginate?tab=doc)\n[![Sourcegraph](https://sourcegraph.com/github.com/pkg6/go-paginate/-/badge.svg)](https://sourcegraph.com/github.com/pkg6/go-paginate?badge)\n[![Release](https://img.shields.io/github/release/pkg6/go-paginate.svg?style=flat-square)](https://github.com/pkg6/go-paginate/releases)\n[![Goproxy.cn](https://goproxy.cn/stats/github.com/pkg6/go-paginate/badges/download-count.svg)](https://goproxy.cn)\n\n## Install\n\n~~~\n$ go get github.com/pkg6/go-paginate\n~~~\n\n## Usage\n\n~~~\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"github.com/pkg6/go-paginate\"\n\t\"github.com/pkg6/go-paginate/gormp\"\n\t\"gorm.io/driver/sqlite\"\n\t\"gorm.io/gorm\"\n\t\"gorm.io/gorm/logger\"\n)\n\ntype Post struct {\n\tID     uint `gormp:\"primarykey\" json:\"id\"`\n\tNumber int  `json:\"number\"`\n}\ntype PostIndex struct {\n\tID     uint `gormp:\"primarykey\" json:\"id\"`\n\tNumber int  `json:\"number\"`\n\tIndex  int  `json:\"index\"`\n}\n\nvar db, _ = gorm.Open(sqlite.Open(\"gormp.db?cache=shared\"), \u0026gorm.Config{\n\tLogger: logger.Default.LogMode(logger.Info),\n})\n\nfunc init() {\n\t_ = db.AutoMigrate(\u0026Post{})\n\tfor i := 1; i \u003c= 100; i++ {\n\t\tp := Post{\n\t\t\tNumber: i,\n\t\t}\n\t\tdb.Save(\u0026p)\n\t}\n}\nfunc simple() {\n\tq := db.Model(Post{})\n\tvar dest []Post\n\tvar adapt = gormp.Adapter(q)\n\tmyPage := paginate.SimplePaginate(adapt, 10, 1)\n\t_ = myPage.Get(\u0026dest)\n\t//获取最后页码\n\tpage, err := myPage.GetLastPage()\n\tfmt.Println(fmt.Sprintf(\"获取最后页码:%v\", page))\n\tfmt.Println(fmt.Sprintf(\"获取最后页码错误信息:%v\", err))\n\t//获取总数\n\ttotal, err := myPage.GetTotal()\n\tfmt.Println(fmt.Sprintf(\"获取总数:%v\", total))\n\tfmt.Println(fmt.Sprintf(\"获取总数错误信息:%v\", err))\n\tfmt.Println(fmt.Sprintf(\"当前页码:%v\", myPage.GetCurrentPage()))\n\tfmt.Println(fmt.Sprintf(\"每页显示多少条数:%v\", myPage.GetListRows()))\n\tfmt.Println(fmt.Sprintf(\"是否还可以进行分页:%v\", myPage.HasPages()))\n\tfmt.Println(dest)\n}\n\nfunc Total() {\n\tq := db.Model(Post{}).Where([]int64{20, 21, 22}).Order(\"id desc\")\n\tvar dest []Post\n\tvar adapt = gormp.Adapter(q)\n\tt, _ := adapt.Length()\n\tmyPage := paginate.TotalPaginate(adapt, 10, 1, t)\n\t_ = myPage.Get(\u0026dest)\n\tvar destIndex []PostIndex\n\tfor i, post := range dest {\n\t\tdestIndex = append(destIndex, PostIndex{ID: post.ID, Number: post.Number, Index: i})\n\t}\n\t// 先执行当get方法此时为nil data数据为dest\n\t// 不执行get方法 此时传入dest，data就是dest\n\t// 执行get方法 此时在传入新的结构体 data 就是data\n\t// 不执行get 此时传入nil 就返回nil\n\tr := myPage.Render(nil)\n\tjsonBytes, _ := json.Marshal(r)\n\txmlBytes, err := xml.Marshal(r)\n\tfmt.Println(string(jsonBytes))\n\tfmt.Println(string(xmlBytes))\n\t//获取最后页码\n\tpage, err := myPage.GetLastPage()\n\tfmt.Println(fmt.Sprintf(\"获取最后页码:%v\", page))\n\tfmt.Println(fmt.Sprintf(\"获取最后页码错误信息:%v\", err))\n\t//获取总数\n\ttotal, err := myPage.GetTotal()\n\tfmt.Println(fmt.Sprintf(\"获取总数:%v\", total))\n\tfmt.Println(fmt.Sprintf(\"获取总数错误信息:%v\", err))\n\tfmt.Println(fmt.Sprintf(\"当前页码:%v\", myPage.GetCurrentPage()))\n\tfmt.Println(fmt.Sprintf(\"每页显示多少条数:%v\", myPage.GetListRows()))\n\tfmt.Println(fmt.Sprintf(\"是否还可以进行分页:%v\", myPage.HasPages()))\n\tfmt.Println(dest)\n}\n\nfunc main() {\n\tTotal()\n\tsimple()\n}\n~~~\n\n## Get \u0026 Render method\n\n| Get                         | Render        | data                |\n| --------------------------- | ------------- | ------------------- |\n| Execute mandatory\u0026data data | nil           | \u0026data               |\n| Execute mandatory\u0026data data | Transfer data | Transfer data       |\n| Do not execute              | nil           | null                |\n| Do not execute              | Transfer data | Get method executed |\n\n## Adapters\n\nAn adapter must implement the `Adapter` interface which has 2 methods:\n~~~\nLength() (int64, error)\nSlice(offset, length int64, dest any) error\n~~~\n\n### GORM Adapter\n~~~\nvar db, _ = gorm.Open(sqlite.Open(\"gorm.db?cache=shared\"), \u0026gorm.Config{\n\tLogger: logger.Default.LogMode(logger.Info),\n})\nq := db.Model(Post{}).Where([]int64{20, 21, 22}).Order(\"id desc\")\nvar dest []Post\nvar adapt = gromp.Adapter(q)\nt, _ := adapt.Length()\nmyPage := paginate.TotalPaginate(adapt, 10, 1, t)\n~~~\n\n### XORM Adapter\n~~~\nvar engine, _ = xorm.NewEngine(\"sqlite3\", \"xorm.db\")\nsession := engine.Table(Post{})\nvar dest []Post\nvar adapt = xormp.Adapter(session)\ntotal, _ := adapt.Length()\nmyPage := paginate.TotalPaginate(adapt, 10, 1, total)\n~~~\n\n### Slice adapter\n~~~\nvar source = []int{\n\t1, 2, 3, 4, 5, 6, 7, 8, 9, 10,\n\t11, 22, 33, 44, 55, 66, 77, 88, 99, 199,\n\t111, 222, 333, 444, 555, 666, 777, 888, 999, 199,\n\t1111, 2222,\n}\nvar adapt = slicep.Adapter(source)\nmyPage := paginate.SimplePaginate(adapt, 10, 5)\n~~~\n\n## Join us\n\nIf you approve of our open source project and are interested in contributing to the development of go-paginator, we sincerely welcome you to join us in developing and improving it. Whether it's [reporting errors](https://github.com/pkg6/go-paginate/issues) or developing a [Pull Request](https://github.com/pkg6/go-paginate/pulls), even modifying a typo can be a great help.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkg6%2Fgo-paginate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpkg6%2Fgo-paginate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkg6%2Fgo-paginate/lists"}