亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語言結合Gin框架快速實現分頁查詢接口

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

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

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

一、環(huán)境準備

依賴庫安裝:

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

數據庫使用 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("數據庫連接失敗:", err)
    }
    // 自動遷移
    _ = db.AutoMigrate(&User{})
}

三、實現分頁查詢接口

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

  • page 當前頁(從 1 開始)
  • pageSize 每頁數量
  • offset = (page - 1) * pageSize

代碼實現:

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

    var (
        users []User
        total int64
    )

    // 轉換為 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
    }

    // 查詢總數
    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")
}

四、接口調用效果

請求:

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}
  ]
}

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

本案例實現了一個 分頁查詢接口

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

優(yōu)化點:

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

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

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

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

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

相關文章

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

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

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

    使用go在mangodb中進行CRUD操作

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

    Go?+?Gin實現雙Token管理員登錄的示例代碼

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

    Go 簡單實現多租戶數據庫隔離

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

    Go語言學習之結構體和方法使用詳解

    這篇文章主要為大家詳細介紹了Go語言中結構體和方法的使用,文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的可以參考一下
    2022-04-04
  • Go語言常見錯誤之將接口定義在實現方

    Go語言常見錯誤之將接口定義在實現方

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

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

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

    Go實現一個輕量級并發(fā)任務調度器(支持限速)

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

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

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

    GoLang BoltDB數據庫詳解

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

最新評論