Documentation
¶
Overview ¶
Package pagination 提供框架无关的分页参数定义。
本包是 PageRequest 的唯一定义位置,middleware 和 data/gormx 均依赖本包, 避免 middleware 层反向依赖 data 层。
Index ¶
Constants ¶
const ( // DefaultPage 是默认页码。 DefaultPage = 1 // DefaultPageSize 是默认每页条数。 DefaultPageSize = 20 // MaxPageSize 是每页最大条数。 MaxPageSize = 500 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type OverMaxPolicy ¶ added in v0.25.2
type OverMaxPolicy int
OverMaxPolicy 描述「请求页长超过上限」时的处理语义。
两种语义都真实存在于消费方,且**响应条数不同**(可观测差异,不能顺手统一):
- OverMaxClamp:钳到 MaxPageSize(pkg/pagination 现行语义)。
- OverMaxFallback:回退到 DefaultPageSize。
const ( // OverMaxClamp 把超限的页长钳到 MaxPageSize。 // 这是 OverMaxPolicy 的零值,也是 pkg/pagination 的现行语义。 OverMaxClamp OverMaxPolicy = iota // OverMaxFallback 把超限的页长回退到 DefaultPageSize。 OverMaxFallback )
type PageRequest ¶
type PageRequest struct {
Page int `json:"page" query:"page" form:"page"`
PageSize int `json:"page_size" query:"page_size" form:"page_size"`
}
PageRequest 表示分页查询请求参数。
func NewPageRequest ¶
func NewPageRequest(page, pageSize int) *PageRequest
NewPageRequest 根据页码和每页条数创建 PageRequest。
func (*PageRequest) Normalize ¶
func (r *PageRequest) Normalize()
Normalize 规范化分页参数,为非法值设置默认值,并限制最大每页条数。
func (*PageRequest) Offset ¶
func (r *PageRequest) Offset() int
Offset 返回分页查询的偏移量。 当计算结果溢出时返回 0(回退到第一页)。 只读:不在接收者上落 Normalize 的写 — 共享 PageRequest(如全局默认值) 并发调 Offset/Limit 时是数据竞争(2026-09-06 复审修复)。
type PageResponse ¶
type PageResponse[T any] struct { Items []T `json:"items"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` Pages int `json:"pages"` }
PageResponse 是全库统一的分页响应信封。
此前 data/gormx(JSON "list")与 data/crud(JSON "items")各有一个 字段名/JSON 契约不同的泛型分页结构,导致 API 契约分叉;两者已统一 为本类型的类型别名,新代码直接使用 pagination.PageResponse。
字段取舍说明:数据字段名采用 items(与 handler/crudh 的 REST 契约 一致),pages 保留 gormx 语义(总页数,向上取整)。
type Policy ¶ added in v0.25.2
type Policy struct {
// DefaultPage 是非法页码(<= 0)时归一化到的页码。
DefaultPage int
// DefaultPageSize 是非法页长(<= 0)时归一化到的页长。
DefaultPageSize int
// MaxPageSize 是页长上限;< 0 表示不限上限。
MaxPageSize int
// OverMax 是页长超上限时的处理语义。
OverMax OverMaxPolicy
}
Policy 是服务级分页口径——把「默认页长 / 上限 / 超限语义」从包级常量里提出来, 让每个服务声明自己的口径,而不是各写一份归一化逻辑。
零值退回包级默认(DefaultPage / DefaultPageSize / MaxPageSize / OverMaxClamp), 因此 `Policy{}` 与包级常量口径完全一致。
字段语义:
- DefaultPage:<= 0 时取包级 DefaultPage。
- DefaultPageSize:<= 0 时取包级 DefaultPageSize。
- MaxPageSize:== 0 时取包级 MaxPageSize;< 0 表示**不限上限**(如「默认 20、不设上限」 的服务);> 0 时为该服务的页长上限。
- OverMax:页长超上限时的语义;未知取值按 OverMaxClamp 处理。
例:默认 50、上限 200、超限回退默认(等价于把口径写死在服务里):
Policy{DefaultPageSize: 50, MaxPageSize: 200, OverMax: OverMaxFallback}
例:默认 20、不限上限:
Policy{DefaultPageSize: 20, MaxPageSize: -1}