ZBLOG

go+gin+mysql实现增删改查功能,代码实例

以下是一个使用Go语言、Gin框架和MySQL数据库实现增删改查功能的简单示例:

package main

import (
	"database/sql"
	"fmt"
	"log"

	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
)

type User struct {
	ID   int    `json:"id"`
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/dbname?parseTime=true")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	router := gin.Default()

	router.GET("/users/:id", func(c *gin.Context) {
		id := c.Param("id")

		var user User
		err := db.QueryRow("SELECT id, name, age FROM users WHERE id = ?", id).Scan(&user.ID, &user.Name, &user.Age)
		if err != nil {
			c.JSON(404, gin.H{"error": "User not found"})
			return
		}

		c.JSON(200, user)
	})

	router.POST("/users", func(c *gin.Context) {
		var user User
		if err := c.ShouldBindJSON(&user); err != nil {
			c.JSON(400, gin.H{"error": "Invalid request payload"})
			return
		}

		result, err := db.Exec("INSERT INTO users (name, age) VALUES (?, ?)", user.Name, user.Age)
		if err != nil {
			c.JSON(500, gin.H{"error": "Failed to create user"})
			return
		}

        // 获取自动生成的ID
        userID, _ := result.LastInsertId()

		user.ID = int(userID)
		c.JSON(201, user)
	})

	router.PUT("/users/:id", func(c *gin.Context) {
		id := c.Param("id")

		var user User
		if err := c.ShouldBindJSON(&user); err != nil {
			c.JSON(400, gin.H{"error": "Invalid request payload"})
			return
		}

		result, err := db.Exec("UPDATE users SET name = ?, age = ? WHERE id = ?", user.Name, user.Age, id)
		if err != nil {
			c.JSON(500, gin.H{"error": "Failed to update user"})
			return
		}

        // 检查是否更新成功
        rowsAffected, _ := result.RowsAffected()
        if rowsAffected == 0 {
            c.JSON(404, gin.H{"error": "User not found"})
            return
        }

		c.Status(204)
	})

	router.DELETE("/users/:id", func(c *gin.Context) {
		id := c.Param("id")

        result, err := db.Exec("DELETE FROM users WHERE id = ?", id)
        if err != nil {
            c.JSON(500, gin.H{"error": "Failed to delete user"})
            return
        }
        
        // 检查是否删除成功
        rowsAffected, _ := result.RowsAffected()
        if rowsAffected == 0 {
            c.JSON(404, gin.H{"error": "User not found"})
            return
        }

        c.Status(204)
    })

    router.Run(":8080")
}

请注意替换username:password@tcp(127.0.0.1:3306)/dbname中的数据库连接信息,以及适应您的数据库结构。

以上示例提供了GET、POST、PUT和DELETE请求的基本处理方法,您可以通过使用Postman等工具来测试这些API。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=8446

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?