当查询的数据来自多个数据源,有哪些好的分页策略?
2015 年 1 月 27 日
package main
import ( "encoding/json" "fmt" )
type User []struct { Name string `json:"name"` Age string `json:"age"` }
type Pagination struct { Total int `json:"total"` CurrentPage int `json:"currentPage"` PrePageCount int `json:"prePageCount"` }
type ListPageData struct { List User `json:"list"` Pagination Pagination `json:"pagination"` }
func main() { jsonStr := `[{"name": "姓名1","age": "年龄1"}, {"name": "姓名2","age": "年龄2"}, {"name": "姓名3","age": "年龄3"}, {"name": "姓名4","age": "年龄4"}, {"name": "姓名5","age": "年龄5"}, {"name": "姓名6","age": "年龄6"}, {"name": "姓名7","age": "年龄7"}, {"name": "姓名8","age": "年龄8"}, {"name": "姓名9","age": "年龄9"}, {"name": "姓名10","age": "年龄10"} ]`
var user User err := json.Unmarshal([]byte(jsonStr), &user) if err != nil { fmt.Println(err.Error()) }
page := 2 pageSize := 3 pageData := ArraySlice(user, page, pageSize)
listPageData := ListPageData{} listPageData.List = pageData listPageData.Pagination.Total = len(user) listPageData.Pagination.CurrentPage = page listPageData.Pagination.PrePageCount = pageSize
jsonData, _ := JsonEncode(listPageData) fmt.Println(jsonData) }
func JsonEncode(v interface{}) (string, error) { bytes, err := json.Marshal(v) if err != nil { return "", err } return string(bytes), nil }
func ArraySlice(u User, page int, pageSize int) User { offset := (page - 1) * pageSize if offset > int(len(u)) { panic("offset: the offset is less than the length of s") } end := offset + pageSize if end < int(len(u)) { return u[offset:end] } return u[offset:]}