Maison >développement back-end >Golang >Comment paginer les requêtes de base de données dans Golang ?

Comment paginer les requêtes de base de données dans Golang ?

WBOY
WBOYoriginal
2024-06-02 12:05:56793parcourir

Réponse : Oui, vous pouvez utiliser les mots-clés LIMIT et OFFSET pour paginer les requêtes de base de données dans Golang. Les étapes sont les suivantes : Déterminez le nombre d'enregistrements à afficher sur chaque page (pageSize). Calculez le décalage (offset), en partant de 0. Utilisez fmt.Sprintf pour créer dynamiquement la chaîne de requête, en insérant les valeurs pageSize et offset. Utilisez LIMIT pour limiter le nombre d'enregistrements à récupérer et OFFSET pour ignorer les enregistrements précédents. Utilisez l'objet rows pour parcourir l'ensemble de résultats et utilisez la fonction Scan pour extraire la valeur de chaque ligne.

如何对 Golang 中的数据库查询进行分页?

Comment paginer des requêtes de base de données dans Golang

La pagination est une fonctionnalité courante dans les applications Web qui permet aux utilisateurs d'afficher une partie d'une grande quantité de données selon une taille spécifiée. Dans Golang, les requêtes peuvent être paginées à l'aide des mots-clés LIMIT et OFFSET. LIMITOFFSET 关键字对查询进行分页。

package main

import (
    "database/sql"
    "fmt"
)

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname")
    if err != nil {
        panic(err)
    }
    defer db.Close()

    // 每页显示 10 条记录
    pageSize := 10

    // 获取第 2 页的数据,OFFSET 从 0 开始
    offset := (2 - 1) * pageSize

    // 编写分页查询
    query := fmt.Sprintf(`
        SELECT id, name
        FROM users
        LIMIT %d OFFSET %d
    `, pageSize, offset)

    rows, err := db.Query(query)
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    // 遍历结果集
    for rows.Next() {
        var id int
        var name string
        if err := rows.Scan(&id, &name); err != nil {
            panic(err)
        }
        fmt.Println(id, name)
    }
}

在这个示例中:

  • pageSize 指定每页显示的记录数。
  • offset 根据当前页数计算偏移量,以便跳过前面的记录。
  • query 字符串使用 fmt.Sprintf 动态构建,插入 pageSizeoffset 值。
  • 该查询使用 LIMIT 限制要获取的记录数,并使用 OFFSET 跳过前面的记录。
  • rows 对象用于遍历结果集,Scanrrreee
  • Dans cet exemple :
  • pageSize spécifie le nombre d'enregistrements à afficher par page. 🎜
  • offset Calcule le décalage en fonction du numéro de page actuel pour ignorer les enregistrements précédents. 🎜
  • La chaîne query est construite dynamiquement à l'aide de fmt.Sprintf, en insérant les valeurs pageSize et offset. 🎜
  • Cette requête utilise LIMIT pour limiter le nombre d'enregistrements à récupérer et OFFSET pour ignorer les enregistrements précédents. L'objet 🎜
  • rows est utilisé pour parcourir l'ensemble de résultats, et la fonction Scan est utilisée pour extraire la valeur de chaque ligne. 🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn