基于 go gin 实现单表增删改查的后端代码
时间: 2024-05-03 18:22:40 浏览: 235
以下是基于 go gin 实现单表增删改查的后端代码示例:
```go
package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"strconv"
"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", "user:password@tcp(localhost:3306)/database")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 创建 gin 实例
r := gin.Default()
// 查询数据
r.GET("/users/:id", func(c *gin.Context) {
id := c.Param("id")
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(http.StatusNotFound, gin.H{"error": "User not found"})
return
}
c.JSON(http.StatusOK, user)
})
// 查询所有数据
r.GET("/users", func(c *gin.Context) {
rows, err := db.Query("SELECT id, name, age FROM users")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal server error"})
return
}
defer rows.Close()
users := []User{}
for rows.Next() {
user := User{}
err := rows.Scan(&user.ID, &user.Name, &user.Age)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal server error"})
return
}
users = append(users, user)
}
c.JSON(http.StatusOK, users)
})
// 添加数据
r.POST("/users", func(c *gin.Context) {
var user User
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
result, err := db.Exec("INSERT INTO users(name, age) VALUES(?, ?)", user.Name, user.Age)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal server error"})
return
}
id, err := result.LastInsertId()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal server error"})
return
}
user.ID = int(id)
c.JSON(http.StatusOK, user)
})
// 更新数据
r.PUT("/users/:id", func(c *gin.Context) {
id := c.Param("id")
var user User
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
_, err := db.Exec("UPDATE users SET name=?, age=? WHERE id=?", user.Name, user.Age, id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal server error"})
return
}
user.ID, _ = strconv.Atoi(id)
c.JSON(http.StatusOK, user)
})
// 删除数据
r.DELETE("/users/:id", func(c *gin.Context) {
id := c.Param("id")
_, err := db.Exec("DELETE FROM users WHERE id=?", id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal server error"})
return
}
c.JSON(http.StatusOK, gin.H{"message": fmt.Sprintf("User %s deleted", id)})
})
// 启动服务器
if err := r.Run(":8080"); err != nil {
log.Fatal(err)
}
}
```
上述代码使用了 gin 框架处理 HTTP 请求,并使用数据库查询和操作数据。其中,查询数据使用了 `QueryRow` 和 `Query` 函数,添加、更新和删除数据使用了 `Exec` 函数。在添加数据和更新数据的处理函数中,使用了 `ShouldBindJSON` 函数将 JSON 数据绑定到 `User` 结构体上。同时,使用了 HTTP 状态码和 JSON 格式响应客户端请求。
阅读全文