> Что такое пагинация? (Go)

Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: InDrive

Стек: Go

> Пример ответа

Пагинация - это механизм постраничного разделения большого набора данных на небольшие порции (страницы) для последовательной загрузки. В бэкенд-разработке на Go пагинация обычно реализуется через SQL-запросы с LIMIT и OFFSET (или курсорную пагинацию) и передаётся клиенту в виде параметров запроса, например ?page=2&limit=20.

Пример реализации на Go с использованием database/sql:

GO
type PaginationParams struct {
Page int `json:"page"`
Limit int `json:"limit"`
}
func GetUsers(db *sql.DB, params PaginationParams) ([]User, int, error) {
offset := (params.Page - 1) * params.Limit
// Получаем общее количество записей для вычисления количества страниц
var total int
err := db.QueryRow("SELECT COUNT(*) FROM users").Scan(&total)
if err != nil {
return nil, 0, err
}
// Запрос с пагинацией
rows, err := db.Query("SELECT id, name FROM users ORDER BY id LIMIT $1 OFFSET $2", params.Limit, offset)
if err != nil {
return nil, 0, err
}
defer rows.Close()
var users []User
for rows.Next() {
var u User
if err := rows.Scan(&u.ID, &u.Name); err != nil {
return nil, 0, err
}
users = append(users, u)
}
return users, total, nil
}

Клиент получает ответ с полями data, total, page, limit и totalPages, что позволяет ему отобразить навигацию. Важно учитывать: при использовании OFFSET на больших объёмах данных производительность падает - в таких случаях предпочтительнее курсорная пагинация (по WHERE id > last_seen_id).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью