欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言結(jié)合Gin框架快速實(shí)現(xiàn)分頁查詢接口

 更新時(shí)間:2025年08月19日 09:37:01   作者:程序員愛釣魚  
在開發(fā)?Web?應(yīng)用時(shí),分頁查詢?是非常常見的需求,在?Go?語言中,我們可以結(jié)合?GORM?+?Gin?框架,快速實(shí)現(xiàn)分頁查詢接口,下面我們來看看具體實(shí)現(xiàn)方法吧

在開發(fā) Web 應(yīng)用時(shí),分頁查詢 是非常常見的需求。比如文章列表、用戶管理后臺(tái)、商品展示頁,都需要分頁展示數(shù)據(jù)。

在 Go 語言中,我們可以結(jié)合 GORM + Gin 框架,快速實(shí)現(xiàn)分頁查詢接口。本文將帶你一步步實(shí)現(xiàn)一個(gè) 用戶列表的分頁接口。

一、環(huán)境準(zhǔn)備

依賴庫安裝:

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
go get -u github.com/gin-gonic/gin

數(shù)據(jù)庫使用 MySQL(也可換 SQLite、Postgres)。

二、定義用戶模型

我們以 User 模型作為例子:

package main

import (
    "github.com/gin-gonic/gin"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "log"
    "net/http"
)

// User 用戶模型
type User struct {
    ID    uint   `gorm:"primaryKey"`
    Name  string `gorm:"size:100"`
    Email string `gorm:"unique"`
    Age   int
}

var db *gorm.DB

func initDB() {
    dsn := "root:123456@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"
    var err error
    db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        log.Fatal("數(shù)據(jù)庫連接失敗:", err)
    }
    // 自動(dòng)遷移
    _ = db.AutoMigrate(&User{})
}

三、實(shí)現(xiàn)分頁查詢接口

分頁查詢的核心就是 計(jì)算 offset 和 limit

  • page 當(dāng)前頁(從 1 開始)
  • pageSize 每頁數(shù)量
  • offset = (page - 1) * pageSize

代碼實(shí)現(xiàn):

// 分頁查詢接口
func getUsers(c *gin.Context) {
    // 獲取查詢參數(shù),默認(rèn) page=1, pageSize=10
    page := c.DefaultQuery("page", "1")
    pageSize := c.DefaultQuery("pageSize", "10")

    var (
        users []User
        total int64
    )

    // 轉(zhuǎn)換為 int
    var p, ps int
    fmt.Sscanf(page, "%d", &p)
    fmt.Sscanf(pageSize, "%d", &ps)
    if p < 1 {
        p = 1
    }
    if ps < 1 {
        ps = 10
    }

    // 查詢總數(shù)
    db.Model(&User{}).Count(&total)

    // 分頁查詢
    db.Offset((p - 1) * ps).Limit(ps).Find(&users)

    // 返回 JSON
    c.JSON(http.StatusOK, gin.H{
        "page":     p,
        "pageSize": ps,
        "total":    total,
        "data":     users,
    })
}

在 main() 中注冊(cè)路由:

func main() {
    initDB()

    r := gin.Default()
    r.GET("/users", getUsers)

    r.Run(":8080")
}

四、接口調(diào)用效果

請(qǐng)求:

curl "http://localhost:8080/users?page=2&pageSize=5"

返回:

{
  "page": 2,
  "pageSize": 5,
  "total": 23,
  "data": [
    {"ID":6,"Name":"Alice","Email":"alice@test.com","Age":22},
    {"ID":7,"Name":"Bob","Email":"bob@test.com","Age":25},
    {"ID":8,"Name":"Tom","Email":"tom@test.com","Age":20},
    {"ID":9,"Name":"Jerry","Email":"jerry@test.com","Age":30},
    {"ID":10,"Name":"Lucy","Email":"lucy@test.com","Age":19}
  ]
}

五、總結(jié)與優(yōu)化

本案例實(shí)現(xiàn)了一個(gè) 分頁查詢接口

  • 支持動(dòng)態(tài) page 和 pageSize 參數(shù)
  • 返回總數(shù) total,便于前端計(jì)算總頁數(shù)
  • 返回當(dāng)前頁數(shù)據(jù)

優(yōu)化點(diǎn):

1. 封裝通用分頁函數(shù),避免每個(gè)接口都重復(fù)寫分頁邏輯。

2. 加入排序功能,如 orderBy=age desc。

3. 加入搜索過濾,例如按用戶名查詢。

這樣,我們就能快速實(shí)現(xiàn)一個(gè)完整的 分頁 + 搜索 + 排序 的列表接口。

到此這篇關(guān)于Go語言結(jié)合Gin框架快速實(shí)現(xiàn)分頁查詢接口的文章就介紹到這了,更多相關(guān)Go語言分頁查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文搞懂Go語言中文件的讀寫與創(chuàng)建

    一文搞懂Go語言中文件的讀寫與創(chuàng)建

    這篇文章主要為大家詳細(xì)介紹了Go語言中文件是如何實(shí)現(xiàn)讀寫與創(chuàng)建的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語言有一定幫助,需要的可以參考一下
    2022-07-07
  • 使用go在mangodb中進(jìn)行CRUD操作

    使用go在mangodb中進(jìn)行CRUD操作

    這篇文章主要介紹了使用go在mangodb中進(jìn)行CRUD操作,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Go?+?Gin實(shí)現(xiàn)雙Token管理員登錄的示例代碼

    Go?+?Gin實(shí)現(xiàn)雙Token管理員登錄的示例代碼

    本文主要介紹了Go?+?Gin實(shí)現(xiàn)雙Token管理員登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • Go 簡(jiǎn)單實(shí)現(xiàn)多租戶數(shù)據(jù)庫隔離

    Go 簡(jiǎn)單實(shí)現(xiàn)多租戶數(shù)據(jù)庫隔離

    本文主要介紹了Go 簡(jiǎn)單實(shí)現(xiàn)多租戶數(shù)據(jù)庫隔離,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Go語言學(xué)習(xí)之結(jié)構(gòu)體和方法使用詳解

    Go語言學(xué)習(xí)之結(jié)構(gòu)體和方法使用詳解

    這篇文章主要為大家詳細(xì)介紹了Go語言中結(jié)構(gòu)體和方法的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2022-04-04
  • Go語言常見錯(cuò)誤之將接口定義在實(shí)現(xiàn)方

    Go語言常見錯(cuò)誤之將接口定義在實(shí)現(xiàn)方

    在Go中,接口起到一個(gè)十分關(guān)鍵的角色,它們提供了一種方式來定義對(duì)象的行為,而不需要知道對(duì)象的具體實(shí)現(xiàn),一個(gè)常見的錯(cuò)誤是在實(shí)現(xiàn)方而不是使用方定義接口,本文將詳細(xì)探討為何這樣做是一個(gè)錯(cuò)誤,以及如何避免它
    2024-01-01
  • Go語言使用singleflight解決緩存擊穿

    Go語言使用singleflight解決緩存擊穿

    在構(gòu)建高性能的服務(wù)時(shí),緩存是優(yōu)化數(shù)據(jù)庫壓力和提高響應(yīng)速度的關(guān)鍵技術(shù),但使用緩存也會(huì)帶來一些問題,其中就包括緩存擊穿,下面我們就來看看Go語言中如何使用singleflight解決緩存擊穿問題吧
    2024-03-03
  • Go實(shí)現(xiàn)一個(gè)輕量級(jí)并發(fā)任務(wù)調(diào)度器(支持限速)

    Go實(shí)現(xiàn)一個(gè)輕量級(jí)并發(fā)任務(wù)調(diào)度器(支持限速)

    本文主要介紹了Go實(shí)現(xiàn)一個(gè)輕量級(jí)并發(fā)任務(wù)調(diào)度器(支持限速),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • golang 40行代碼實(shí)現(xiàn)通用協(xié)程池

    golang 40行代碼實(shí)現(xiàn)通用協(xié)程池

    golang協(xié)程機(jī)制很方便的解決了并發(fā)編程的問題,但是協(xié)程并不是沒有開銷的,所以也需要適當(dāng)限制一下數(shù)量。這篇文章主要介紹了golang 40行代碼實(shí)現(xiàn)通用協(xié)程池,需要的朋友可以參考下
    2018-08-08
  • GoLang BoltDB數(shù)據(jù)庫詳解

    GoLang BoltDB數(shù)據(jù)庫詳解

    這篇文章主要介紹了GoLang BoltDB數(shù)據(jù)庫,boltdb是使用Go語言編寫的開源的鍵值對(duì)數(shù)據(jù)庫,boltdb存儲(chǔ)數(shù)據(jù)時(shí) key和value都要求是字節(jié)數(shù)據(jù),此處需要使用到 序列化和反序列化
    2023-02-02

最新評(píng)論