c26b06f1cc
Go 控制面(SQLite + REST API)嵌入 Mihomo 数据面,Vue 3 多语言 Web 管理台。 含订阅/节点/规则/出站/监控/日志、OpenAPI、API Key、Gitea Actions CI 与开源文档; CI 使用 ubuntu-latest runner,Go/Docker 步骤走国内镜像与 shell,避免 GitHub 下载超时。 Co-authored-by: Cursor <cursoragent@cursor.com>
36 lines
619 B
Go
36 lines
619 B
Go
package api
|
|
|
|
import "strconv"
|
|
|
|
const (
|
|
defaultPageLimit = 50
|
|
maxPageLimit = 500
|
|
)
|
|
|
|
func parseLimitOffset(limitStr, offsetStr string) (limit, offset int) {
|
|
limit, _ = strconv.Atoi(limitStr)
|
|
offset, _ = strconv.Atoi(offsetStr)
|
|
if limit <= 0 {
|
|
limit = defaultPageLimit
|
|
}
|
|
if limit > maxPageLimit {
|
|
limit = maxPageLimit
|
|
}
|
|
if offset < 0 {
|
|
offset = 0
|
|
}
|
|
return limit, offset
|
|
}
|
|
|
|
func paginateSlice[T any](items []T, limit, offset int) ([]T, int) {
|
|
total := len(items)
|
|
if offset >= total {
|
|
return nil, total
|
|
}
|
|
end := offset + limit
|
|
if end > total {
|
|
end = total
|
|
}
|
|
return items[offset:end], total
|
|
}
|