main.go 完整配置

package main

import (
	"net/http"
	"time"

	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// ====================== 数据库配置(你直接用自己的)======================
const (
	dbUser     = "root"           // 你能用的MySQL用户名
	dbPassword = "" // 你的密码
	dbName     = "testdb"         // 数据库
	dbHost     = "127.0.0.1"
	dbPort     = "3306"
)

// 全局DB
var db *gorm.DB

// User 数据表模型
type User struct {
	gorm.Model
	Name string `json:"name"`
	Age  uint   `json:"age"`
	City string `json:"city"`
}

// 初始化MySQL
func initDB() {
	dsn := dbUser + ":" + dbPassword + "@tcp(" + dbHost + ":" + dbPort + ")/" + dbName + "?charset=utf8mb4&parseTime=True&loc=Local"
	var err error
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("数据库连接失败")
	}

	// 自动建表
	db.AutoMigrate(&User{})
}

func main() {
	// 初始化数据库
	initDB()

	// 创建Gin路由
	r := gin.Default()

	// 跨域中间件(必须在路由注册之前)
	r.Use(cors.New(cors.Config{
		AllowOrigins:              []string{"http://localhost:5173"},
		AllowMethods:              []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
		AllowHeaders:              []string{"Origin", "Content-Type", "Authorization"},
		MaxAge:                    12 * time.Hour,
		OptionsResponseStatusCode: http.StatusOK, // 可选:把预检改成200
	}))
	// ======== 5个CRUD接口 =========
	// 1. 创建用户
	r.POST("/user", createUser)

	// 2. 获取单个用户
	r.GET("/user/:id", getUser)

	// 3. 获取用户列表
	r.GET("/users", getUserList)

	// 4. 修改用户
	r.PUT("/user/:id", updateUser)

	// 5. 删除用户
	r.DELETE("/user/:id", deleteUser)
	// 启动服务
	r.Run(":8080")
}

// 1. 创建用户
func createUser(c *gin.Context) {
	var user User
	c.ShouldBindJSON(&user)
	db.Create(&user)
	c.JSON(http.StatusOK, gin.H{"data": user})
}

// 2. 获取单个用户
func getUser(c *gin.Context) {
	id := c.Param("id")
	var user User
	db.First(&user, id)
	c.JSON(http.StatusOK, gin.H{"data": user})
}

// 3. 获取用户列表
func getUserList(c *gin.Context) {
	var users []User
	db.Find(&users)
	c.JSON(http.StatusOK, gin.H{"data": users})
}

// 4. 修改用户
func updateUser(c *gin.Context) {
	id := c.Param("id")
	var user User
	db.First(&user, id)

	var data User
	c.ShouldBindJSON(&data)

	user.Name = data.Name
	user.Age = data.Age
	user.City = data.City

	db.Save(&user)
	c.JSON(http.StatusOK, gin.H{"data": user})
}

// 5. 删除用户
func deleteUser(c *gin.Context) {
	id := c.Param("id")
	db.Delete(&User{}, id)
	c.JSON(http.StatusOK, gin.H{"message": "删除成功"})
}

  

posted @ 2026-04-02 11:28  Panax  阅读(10)  评论(0)    收藏  举报