AG-Grid는 정렬, 필터링, 페이지 매김과 같은 기능을 갖춘 동적 고성능 테이블을 구축하는 데 이상적인 강력한 JavaScript 데이터 그리드 라이브러리입니다. 이 기사에서는 AG-Grid를 지원하기 위해 Go에서 API를 생성하여 필터링, 정렬, 페이지 매김을 포함한 효율적인 서버 측 데이터 작업을 가능하게 합니다. 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 웹 애플리케이션에 대한 라우팅을 설정합니다. 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 웹 애플리케이션을 생성하고 설정합니다.
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 웹 앱 만들기: https://stackpuz.com
위 내용은 Go를 사용하여 AG-Grid용 API 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!