Help us shape the future of Go! Take the 2026 Go Developer Survey

paging

package
v0.32.41 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 31, 2026 License: Apache-2.0 Imports: 1 Imported by: 0

Documentation

Overview

Package paging 集中 core 全仓的**分页口径**(默认页长 / 上限 / 超限语义)。

为什么要有这个包:本仓历史上**手搓了多套**分页归一化(同一概念、多个实现、 两种超限语义),分别散在 app/notify、app/admin、app/mcp、repo/db/dao、 gen/handler ⇒ 前端 / MCP 消费方在同一个 page_size 超限时拿到**不同条数** (可观测差异)。收编到 oekit/pkg/pagination 的 Policy 后,口径变成**声明式** 的一行常量,且两种超限语义(截断 / 回落)都能表达。

口径表(**唯一登记处**——新增域先在此登记,别再各写一份)

#  域                     默认  上限      超限语义      位置
1  dao 通用(8 个 List)   20    200      截断 Clamp    repo/db/dao/page.go
2  dao 用户分享(带筛选)  20    100      截断 Clamp    repo/db/dao/filecode_usershares.go
3  notify 公告 / 通知     20    100      回落 Fallback app/notify/notify.go
4  mcp 分享列表           20    100      截断 Clamp    app/mcp/tools.go
5  mcp 用户列表           20    不限上限  —             app/mcp/tools.go
6  admin 系统日志         50    500      截断 Clamp    app/admin/system.go
7  admin 操作审计         20    200      截断 Clamp    gen/handler/admin/localfiles_ops.go
8  gen admin 列表 ×2      20    不限上限  —             gen/handler/admin/admin_service.go
9  gen user 文件列表      20    100      回落 Fallback gen/handler/user/user_service.go
10 gen share 用户分享     20    不限上限  —             gen/handler/share/share_service.go

# 1–10 **全部已收编**到本包的 Policy(#8 于 2026-10-29 收编:第 8–10 项此前 标注「生成物,未收编」⇒ 口径清单漏了 3 项,正是这套方言当初失控的原因)。

#8 的原判断是「这些文件是 hz/thriftgo 产物 ⇒ 改产物必被覆盖且必红」⇒ 实测 **不成立**(2026-10-29 沙箱实证):① `hz update` 对既有 handler 文件只**追加** 新方法的桩,**不重写**既有函数体(手写段落原样存活);② CI 的 Gen drift check 对 `gen/handler` **只对账文件增删**(`gen/router` 才逐字节比对)⇒ 改既有 handler 的内容不会让 CI 红。⇒ 与 `gen/handler/admin/localfiles_ops.go` (同为生成物目录下的手写文件、早已 import 本包)同款处置。

⚠️ 每一套口径都是**既有契约**(页长决定响应条数,消费方可见)⇒ 收编只改 「口径怎么表达」,**口径本身一字不改**:迁移前后每个域的返回条数必须逐条 一致——由各域的「现状锁定」用例钉住(dao / notify / admin / mcp 各一条)。

⚠️ 「回落」与「截断」在**同一输入下产出不同条数**(pageSize=101 ⇒ notify 得 20、mcp 分享列表得 100)⇒ **不可顺手统一**:消费方按域各自适应。

为什么不用 pkg/pagination 的包级常量:那些是**库默认值**(20 / 500 / 截断), 不是本仓任一域的口径 ⇒ 直接用会把上限从 200 / 100 变成 500 ⇒ 响应条数变化。

这些变量是**口径声明**,不是可变状态——请勿在运行期改写。

Index

Constants

This section is empty.

Variables

View Source
var AdminActivitiesPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     200,
	OverMax:         pagination.OverMaxClamp,
}

AdminActivitiesPolicy 是管理操作审计口径(默认 20、上限 200、超限截断)。

View Source
var AdminSystemLogPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 50,
	MaxPageSize:     500,
	OverMax:         pagination.OverMaxClamp,
}

AdminSystemLogPolicy 是系统日志口径(默认 **50**、上限 **500**、超限截断)。

⚠️ 默认值与上限都不同于其它域 ⇒ 不可与别的域共用口径。

View Source
var DAOPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     200,
	OverMax:         pagination.OverMaxClamp,
}

DAOPolicy 是 dao 通用分页口径(默认 20、上限 200、超限**截断**)。

View Source
var GenAdminListPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     -1,
	OverMax:         pagination.OverMaxClamp,
}

GenAdminListPolicy 是 gen admin 列表口径(默认 20、**不设上限**)。

对应 gen/handler/admin/admin_service.go 的 AdminListFiles 与 AdminListUsers 两处(原写法:page ≤ 0 ⇒ 1、pageSize ≤ 0 ⇒ 20,**无上限**)。

View Source
var GenShareUserSharesPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     -1,
	OverMax:         pagination.OverMaxClamp,
}

GenShareUserSharesPolicy 是 gen share 用户分享列表口径(默认 20、**不设上限**)。

对应 gen/handler/share/share_service.go 的 UserSharesList 一处 (原写法:page < 1 ⇒ 1、pageSize < 1 ⇒ 20,**无上限**)。

⚠️ 归一化发生在**查询之后**(原实现先把原始 page/pageSize 传给 service, 归一化只用于算响应里的 page/page_size/total_pages)⇒ 收编时**保持这个次序** 不变,否则「查询条数」与「响应里报告的页长」会错位(响应条数随之变化)。

View Source
var GenUserFilesPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     100,
	OverMax:         pagination.OverMaxFallback,
}

GenUserFilesPolicy 是 gen user 文件列表口径(默认 20、上限 100、超限**回落**)。

⚠️ 本口径是**回落**(超限 ⇒ 回退 20),不是截断 ⇒ 与 dao 域同输入不同条数。 对应 gen/handler/user/user_service.go 的 UserFiles 一处 (原写法:page < 1 ⇒ 1、pageSize < 1 **或 > 100** ⇒ 20)。

View Source
var MCPListSharesPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     100,
	OverMax:         pagination.OverMaxClamp,
}

MCPListSharesPolicy 是 MCP 分享列表口径(默认 20、上限 100、超限**截断**)。

View Source
var MCPListUsersPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     -1,
	OverMax:         pagination.OverMaxClamp,
}

MCPListUsersPolicy 是 MCP 用户列表口径(默认 20、**不设上限**)。

⚠️ MaxPageSize < 0 = 不限上限(pkg/pagination 的 Policy 语义)。 下游 dao 仍会按自身口径再钳一次,但本层报告的 page_size 是这里的值 (与实际返回条数可能不一致——既有行为,本次收编不改它)。

View Source
var NotifyPolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     100,
	OverMax:         pagination.OverMaxFallback,
}

NotifyPolicy 是 notify 域分页口径(默认 20、上限 100、超限**回落**到默认)。

⚠️ 本域是**回落**(超限 ⇒ 回退 20),不是截断 ⇒ 与 dao 域同输入不同条数。

View Source
var UserSharePolicy = pagination.Policy{
	DefaultPage:     1,
	DefaultPageSize: 20,
	MaxPageSize:     100,
	OverMax:         pagination.OverMaxClamp,
}

UserSharePolicy 是 dao 用户分享列表口径(默认 20、上限 100、超限**截断**)。

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL