package main
import (
"log"
"
github.com/gin-gonic/gin"
"
gorm.io/driver/mysql"
"
gorm.io/gorm"
)
type User struct {
gorm.Model
Name string
Email string
}
func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
if u.Email == "" {
ctx := tx.Statement.Context
if v, ok := ctx.Value("Email").(string); ok {
u.Email = v
}
}
return
}
func main() {
// 初始化 Gin 路由器实例
r := gin.Default()
// 初始化 Gorm 数据库连接
dsn := "root:root@tcp(127.0.0.1:3306)/gorm-example?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 自动迁移模型结构体到数据库表
db.AutoMigrate(&User{})
// 创建处理程序函数
createUser := func(c *gin.Context) {
var user User
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
log.Println("Email:", c.GetString("Email"))
db.WithContext(c).Create(&user)
c.JSON(200, user)
}
// 自定义中间件,设置 example 变量为 123
r.Use(func(c *gin.Context) {
c.Set("Email", "
[email protected]")
c.Next()
})
// 在路由器实例中注册处理程序函数
r.POST("/users", createUser)
// 启动 Gin 服务器,监听 HTTP 请求
r.Run(":8080")
}
我试了一下,这样可以,你对照着看下呢