Shaw0xyz 发表于 2024-5-19 13:30:49

使用Gin和Gorm实现CRUD操作

本帖最后由 Shaw0xyz 于 2024-5-19 13:32 编辑

在现代Web开发中,高效处理数据并提供快速响应的API是非常重要的。在Go语言生态中,Gin和Gorm分别是流行的Web框架和ORM工具。本文将介绍如何使用Gin和Gorm实现基本的CRUD(创建、读取、更新、删除)操作。


环境准备

在开始之前,确保你已经安装了Go并设置了GOPATH。接下来,创建一个新的Go项目并安装Gin和Gorm:

go mod init gin-gorm-crud
go get -u github.com/gin-gonic/gin
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
这里我们使用SQLite作为数据库,你也可以选择其他数据库驱动(如PostgreSQL、MySQL等)。

项目结构

项目结构如下:
gin-gorm-crud/

├── main.go
└── models/
    └── user.go
创建数据模型

在`models/`目录下创建一个`user.go`文件,定义User模型:

package models

import (
      "gorm.io/gorm"
)

type User struct {
      gorm.Model
      Namestring `json:"name"`
      Email string `json:"email"`
}
初始化Gorm和Gin

在`main.go`中初始化Gorm和Gin:

package main

import (
      "gin-gorm-crud/models"
      "gorm.io/driver/sqlite"
      "gorm.io/gorm"
      "github.com/gin-gonic/gin"
      "net/http"
)

var DB *gorm.DB

func initDB() {
      var err error
      DB, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
      if err != nil {
                panic("failed to connect database")
      }

      DB.AutoMigrate(&models.User{})
}

func main() {
      initDB()

      r := gin.Default()
      r.GET("/users", getUsers)
      r.GET("/users/:id", getUser)
      r.POST("/users", createUser)
      r.PUT("/users/:id", updateUser)
      r.DELETE("/users/:id", deleteUser)
      
      r.Run()
}
实现CRUD处理函数

接下来,实现CRUD操作的处理函数:

读取用户

func getUsers(c *gin.Context) {
      var users []models.User
      DB.Find(&users)
      c.JSON(http.StatusOK, users)
}

func getUser(c *gin.Context) {
      id := c.Param("id")
      var user models.User
      if err := DB.First(&user, id).Error; err != nil {
                c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
                return
      }
      c.JSON(http.StatusOK, user)
}
创建用户

func createUser(c *gin.Context) {
      var user models.User
      if err := c.ShouldBindJSON(&user); err != nil {
                c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
                return
      }
      DB.Create(&user)
      c.JSON(http.StatusCreated, user)
}

更新用户

func updateUser(c *gin.Context) {
      id := c.Param("id")
      var user models.User
      if err := DB.First(&user, id).Error; err != nil {
                c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
                return
      }
      if err := c.ShouldBindJSON(&user); err != nil {
                c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
                return
      }
      DB.Save(&user)
      c.JSON(http.StatusOK, user)
}

删除用户

func deleteUser(c *gin.Context) {
      id := c.Param("id")
      var user models.User
      if err := DB.First(&user, id).Error; err != nil {
                c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
                return
      }
      DB.Delete(&user)
      c.JSON(http.StatusOK, gin.H{"message": "User deleted"})
}
运行项目

完成以上步骤后,运行你的项目:

go run main.go
打开浏览器或使用Postman等工具访问`http://localhost:8080`,进行CRUD操作的测试:

- 创建用户:POST `/users`,请求体包含JSON格式的用户数据。
- 读取所有用户:GET `/users`
- 读取特定用户:GET `/users/:id`
- 更新用户:PUT `/users/:id`,请求体包含JSON格式的用户数据。
- 删除用户:DELETE `/users/:id`

结语

通过本文,你学习了如何使用Gin和Gorm实现基本的CRUD操作。这种组合非常适合Go语言的Web应用开发,既能高效处理HTTP请求,又能方便地操作数据库。

页: [1]
查看完整版本: 使用Gin和Gorm实现CRUD操作