以下是一个使用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助手提供,问题来源于学员提问