分页通过page和page_size计算offset实现,数据库分页用LIMIT和OFFSET查询,内存分页用切片截取,需返回总条数、总页数等元信息。

在Golang中实现数据分页显示,核心是通过限制查询数量和偏移量来控制返回的数据范围。通常结合数据库查询(如MySQL、PostgreSQL)或内存数据处理来完成。以下是具体实现方式。
1. 分页的基本参数
分页通常需要两个关键参数:
- page:当前页码(一般从1开始)
- page_size 或 limit:每页显示的记录数
根据这两个参数,可以计算出 SQL 查询所需的 offset:
offset = (page - 1) * page_size2. 数据库查询中的分页(以MySQL为例)
使用 SQL 的 LIMIT 和 OFFSET 实现分页查询:
立即学习“go语言免费学习笔记(深入)”;
SELECT id, name, email FROM users LIMIT ? OFFSET ?在Go中结合 database/sql 或 GORM 等库执行:
模板采用响应式设计,自动适应手机,电脑及平板显示;满足单一店铺外卖需求。功能:1.菜单分类管理2.菜品管理:菜品增加,删除,修改3.订单管理4.友情链接管理5.数据库备份6.文章模块:如:促销活动,帮助中心7.单页模块:如:企业信息,关于我们更强大的功能在开发中……安装方法:上传到网站根目录,运行http://www.***.com/install 自动
示例代码(使用 database/sql):
func GetUsers(db *sql.DB, page, pageSize int) ([]User, error) {offset := (page - 1) * pageSize
rows, err := db.Query("SELECT id, name, email FROM users LIMIT ? OFFSET ?", pageSize, offset)
if err != nil {
return nil, err
}
defer rows.Close()
var users []User
for rows.Next() {
var u User
err := rows.Scan(&u.ID, &u.Name, &u.Email)
if err != nil {
return nil, err
}
users = append(users, u)
}
return users, nil
}
3. 返回分页元信息
前端常需要总条数、总页数等信息。可以在查询时一并获取:
func GetUsersWithPagination(db *sql.DB, page, pageSize int) (map[string]interface{}, error) {var total int
err := db.QueryRow("SELECT COUNT(*) FROM users").Scan(&total)
if err != nil {
return nil, err
}
users, err := GetUsers(db, page, pageSize)
if err != nil {
return nil, err
}
return map[string]interface{}{
"data": users,
"total": total,
"page": page,
"page_size": pageSize,
"pages": (total + pageSize - 1) / pageSize,
}, nil
}
4. 内存数据分页(适用于小数据集)
如果数据已加载到内存中,可以通过切片操作实现分页:
func Paginate(slice []User, page, pageSize int) []User {start := (page - 1) * pageSize
if start >= len(slice) {
return []User{}
}
end := start + pageSize
if end > len(slice) {
end = len(slice)
}
return slice[start:end]
}
基本上就这些。数据库分页适合大数据量,注意性能优化;内存分页适合小数据,简单直接。关键是正确计算 offset 并返回必要的分页信息。









