AG-Grid 是一個強大的 JavaScript 資料網格庫,非常適合建立具有排序、過濾和分頁等功能的動態高效能表格。在本文中,我們將在 Go 中建立一個 API 來支援 AG-Grid,從而實現高效的伺服器端資料操作,包括過濾、排序和分頁。透過將 AG-Grid 與 Go API 集成,我們將開發一個強大的解決方案,即使在處理大型資料集時也能確保平穩的效能。
設定 Go 專案依賴項。
go mod init app go get github.com/gin-gonic/gin go get gorm.io/gorm go get gorm.io/driver/mysql go get github.com/joho/godotenv
建立一個名為「example」的測試資料庫,並執行database.sql檔案導入表和資料。
├─ .env ├─ main.go ├─ config │ └─ db.go ├─ controllers │ └─ product_controller.go ├─ models │ └─ product.go ├─ public │ └─ index.html └─ router └─ router.go
此文件包含資料庫連線資訊。
DB_HOST=localhost DB_PORT=3306 DB_DATABASE=example DB_USER=root DB_PASSWORD=
此文件使用 GORM 設定資料庫連線。它聲明了一個全域變數 DB 來保存資料庫連線實例,以便稍後在我們的應用程式中使用。
package config import ( "fmt" "os" "github.com/joho/godotenv" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/schema" ) var DB *gorm.DB func SetupDatabase() { godotenv.Load() connection := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true", os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_DATABASE")) db, _ := gorm.Open(mysql.Open(connection), &gorm.Config{NamingStrategy: schema.NamingStrategy{SingularTable: true}}) DB = db }
此檔案為 Gin Web 應用程式設定路由。它初始化 DataTables API 的路由器並在根 URL 處提供靜態 index.html 檔案。
package router import ( "app/controllers" "github.com/gin-gonic/gin" ) func SetupRouter() { productController := controllers.ProductController{} router := gin.Default() router.StaticFile("/", "./public/index.html") router.GET("/api/products", productController.Index) router.Run() }
此文件定義應用程式的產品模型。
package models type Product struct { Id int Name string Price float64 }
此檔案定義了一個函數來處理傳入請求並傳回 DataTables 資料。
package controllers import ( "app/config" "app/models" "net/http" "strconv" "github.com/gin-gonic/gin" ) type ProductController struct { } func (con *ProductController) Index(c *gin.Context) { size, _ := strconv.Atoi(c.DefaultQuery("length", "10")) start, _ := strconv.Atoi(c.Query("start")) order := "id" if c.Query("order[0][column]") != "" { order = c.Query("columns[" + c.Query("order[0][column]") + "][data]") } direction := c.DefaultQuery("order[0][dir]", "asc") var products []models.Product query := config.DB.Model(&products) var recordsTotal, recordsFiltered int64 query.Count(&recordsTotal) search := c.Query("search[value]") if search != "" { search = "%" + search + "%" query.Where("name like ?", search) } query.Count(&recordsFiltered) query.Order(order + " " + direction). Offset(start). Limit(size). Find(&products) c.JSON(http.StatusOK, gin.H{"draw": c.Query("draw"), "recordsTotal": recordsTotal, "recordsFiltered": recordsFiltered, "data": products}) }
product_controller.go 檔案定義了一個控制器,用於使用 Gin 框架管理 Go 應用程式中與產品相關的 API 請求。它具有一個 Index 方法,可根據分頁、排序和搜尋的查詢參數檢索分頁的產品清單。此方法提取分頁參數,建構查詢以從資料庫中取得產品,並在提供搜尋字詞的情況下套用篩選。在統計匹配產品總數後,它會對結果進行排序和限制,然後傳回包含產品資料和總數的 JSON 回應,以便於與前端應用程式整合。
該檔案是我們應用程式的主要入口點。它將創建並設定 Gin Web 應用程式。
package main import ( "app/config" "app/router" ) func main() { config.SetupDatabase() router.SetupRouter() }
<!DOCTYPE html> <head> <script src="https://cdn.jsdelivr.net/npm/ag-grid-community/dist/ag-grid-community.min.js"></script> </head> <body> <div> <p>The index.html file sets up a web page that uses the AG-Grid library to display a dynamic data grid for products. It includes a grid styled with the AG-Grid theme and a JavaScript section that constructs query parameters for pagination, sorting, and filtering. The grid is configured with columns for ID, Name, and Price, and it fetches product data from an API endpoint based on user interactions. Upon loading, the grid is initialized, allowing users to view and manipulate the product list effectively.</p> <h2> Run project </h2> <pre class="brush:php;toolbar:false">go run main.go
開啟網頁瀏覽器並前往http://localhost:8080
你會發現這個測試頁。
從「頁面大小」下拉清單中選擇 50 來變更頁面大小。每頁將顯示 50 筆記錄,最後一頁將從 5 筆變為 2 筆。
點選第一列的標題。您將看到 id 列將按降序排序。
在“名稱”欄的搜尋文字方塊中輸入“否”,您將看到過濾後的結果資料。
總之,我們有效地將 AG-Grid 與 Go API 集成,以創建強大且高效的資料網格解決方案。透過利用 Go 的後端功能,我們讓 AG-Grid 能夠處理伺服器端過濾、排序和分頁,即使在處理大型資料集時也能確保流暢的效能。這種整合不僅優化了資料管理,還增強了前端動態、響應式表格的使用者體驗。透過 AG-Grid 和 Go 的協調工作,我們建立了一個非常適合實際應用的可擴展且高效能的網格系統。
原始碼:https://github.com/stackpuz/Example-AG-Grid-Go
在幾分鐘內建立一個 CRUD Web 應用程式:https://stackpuz.com
以上是使用 Go 為 AG-Grid 建立 API的詳細內容。更多資訊請關注PHP中文網其他相關文章!