最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

一、環(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)
    }
    // 自動遷移
    _ = db.AutoMigrate(&User{})
}

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

分頁查詢的核心就是 計算 offset 和 limit

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

代碼實現(xiàn):

// 分頁查詢接口
func getUsers(c *gin.Context) {
    // 獲取查詢參數(shù),默認 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() 中注冊路由:

func main() {
    initDB()

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

    r.Run(":8080")
}

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

請求:

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)化

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

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

優(yōu)化點:

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

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

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

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

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

相關(guān)文章

  • Go?1.22版本新特性前瞻

    Go?1.22版本新特性前瞻

    這篇文章主要為大家介紹了Go?1.22版本新特性前瞻,包含語言的變化,編譯器、運行時與工具鏈等應(yīng)用對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 使用Go解析.ini配置文件格式的操作教程

    使用Go解析.ini配置文件格式的操作教程

    使用?Go?語言解析一個?.ini?格式的配置文件,提取其中的鍵值對,并按?section?分類存儲,本文將給大家介紹如何用?Go?語言解析常見的?.ini?配置文件格式,需要的朋友可以參考下
    2025-07-07
  • go語言實現(xiàn)并發(fā)網(wǎng)絡(luò)爬蟲的示例代碼

    go語言實現(xiàn)并發(fā)網(wǎng)絡(luò)爬蟲的示例代碼

    本文主要介紹了go語言實現(xiàn)并發(fā)網(wǎng)絡(luò)爬蟲的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 詳解如何在Golang中監(jiān)聽多個channel

    詳解如何在Golang中監(jiān)聽多個channel

    這篇文章主要為大家詳細介紹了如何在Golang中實現(xiàn)監(jiān)聽多個channel,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • Go語言const&iota的實現(xiàn)示例

    Go語言const&iota的實現(xiàn)示例

    本文主要介紹了Go語言const&iota的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • golang指數(shù)運算操作

    golang指數(shù)運算操作

    這篇文章主要介紹了golang指數(shù)運算操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 使用go實現(xiàn)簡易比特幣區(qū)塊鏈公鏈功能

    使用go實現(xiàn)簡易比特幣區(qū)塊鏈公鏈功能

    這篇文章主要介紹了使用go實現(xiàn)簡易比特幣區(qū)塊鏈公鏈功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Golang Gob編碼(gob包的使用詳解)

    Golang Gob編碼(gob包的使用詳解)

    這篇文章主要介紹了Golang Gob編碼(gob包的使用詳解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • go-kit組件使用hystrix中間件的操作

    go-kit組件使用hystrix中間件的操作

    這篇文章主要介紹了go-kit組件使用hystrix中間件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言學(xué)習(xí)之context包的用法詳解

    Go語言學(xué)習(xí)之context包的用法詳解

    日常Go開發(fā)中,Context包是用的最多的一個了,幾乎所有函數(shù)的第一個參數(shù)都是ctx,那么我們?yōu)槭裁匆獋鬟fContext呢,Context又有哪些用法,底層實現(xiàn)是如何呢?相信你也一定會有探索的欲望,那么就跟著本篇文章,一起來學(xué)習(xí)吧
    2022-10-10

最新評論

集贤县| 政和县| 寿阳县| 仙桃市| 广河县| 河源市| 白水县| 盐源县| 隆德县| 阿拉尔市| 布拖县| 文山县| 临澧县| 谷城县| 景德镇市| 汝阳县| 平遥县| 泗水县| 额济纳旗| 垫江县| 南乐县| 通海县| 福建省| 葵青区| 玉山县| 吉木乃县| 临高县| 沙田区| 吴堡县| 怀宁县| 织金县| 永胜县| 临夏县| 沙洋县| 凌海市| 朝阳县| 长葛市| 冀州市| 大宁县| 平武县| 依安县|