Gorm BeforeCreate钩子不工作生成UUID

Gorm BeforeCreate钩子不工作生成UUID,go,go-gorm,Go,Go Gorm,每次创建公司时,我都试图生成UUID。我曾想过在hook函数中使用它,但它不起作用。如果程序被执行,我试图使它死机,但是钩子没有响应 我按照文档说明了如何实现钩子,但它对我不起作用。 文件: 导入( “时间” “github.com/jinju/gorm” uuid“github.com/satori/go.uuid” ) 类型基结构{ ID uuid.uuid`gorm:“类型:uuid;”json:“\u ID”` CreatedAt time.time`gorm:“type:Date;”j

每次创建公司时,我都试图生成UUID。我曾想过在hook函数中使用它,但它不起作用。如果程序被执行,我试图使它死机,但是钩子没有响应

我按照文档说明了如何实现钩子,但它对我不起作用。 文件:

导入(
“时间”
“github.com/jinju/gorm”
uuid“github.com/satori/go.uuid”
)
类型基结构{
ID uuid.uuid`gorm:“类型:uuid;”json:“\u ID”`
CreatedAt time.time`gorm:“type:Date;”json:“created_at”`
UpdatedAt time.time`gorm:“type:Date;”json:“updated_at”`
DeletedAt*time.time`gorm:“type:Date;”json:“deleted_at”`
}
类型CompanyModel结构{
基础
//Departments[]DepartmentModel`gorm:“foreignKey:id”json:“Departments”`
Cvr int`gorm:“非空”json:“Cvr”`
名称字符串`gorm:“非空”json:“名称”`
}
//在创建之前创建
创建(tx*gorm.DB)之前的func(u*Base)(错误){
u、 ID=uuid.NewV4()
恐慌(身份证)
返回
}
//在保存之前创建
保存(tx*gorm.DB)之前的函数(u*Base)(错误){
u、 ID=uuid.NewV4()
恐慌(身份证)
返回
}
我通过以下方式创建了一家公司

tx:=db.Session(&gorm.Session{SkipHooks:false})。创建(&models.CompanyModel){
Cvr:12333,
名称:“测试,
//部门:公司,部门,
},
)
执行时保存的值始终为

[1.479ms][rows:0]插入“公司模型”(“id”、“创建时间”、“更新时间”、“删除时间”、“cvr”、“名称”)值('00000000-0000-0000-0000-00000000'、'2021-04-21 18:00:51.879'、'2021-04-21 18:00:51.879'、NULL、12333、'test'))

看起来您正在使用gorm v1,我认为您需要gorm v2,导入是
“gorm.io/gorm”

最低工作示例:

主程序包
进口(
“fmt”
“gorm.io/driver/sqlite”
“gorm.io/gorm”
)
类型用户结构{
Id int
名称字符串
}
创建(tx*gorm.DB)之前的func(u*用户)(错误){
u、 Name=“史蒂夫”
返回
}
保存(tx*gorm.DB)之前的func(u*用户)(错误){
u、 Name=“萨利”
返回
}
func main(){
db,err:=gorm.Open(sqlite.Open(“hooks.db”),&gorm.Config{})
如果错误!=零{
死机(“连接数据库失败”)
}
db.AutoMigrate(&User{})
用户:=用户{
姓名:“布莱克”,
}
db.Create(&user)
fmt.Println(用户名)
user.Name=“泰勒”
db.Save(&user)
fmt.Println(用户名)
}
印刷品:

Steve
Sally

看起来您正在使用gorm v1,我认为您需要gorm v2,导入的是
“gorm.io/gorm”

最低工作示例:

主程序包
进口(
“fmt”
“gorm.io/driver/sqlite”
“gorm.io/gorm”
)
类型用户结构{
Id int
名称字符串
}
创建(tx*gorm.DB)之前的func(u*用户)(错误){
u、 Name=“史蒂夫”
返回
}
保存(tx*gorm.DB)之前的func(u*用户)(错误){
u、 Name=“萨利”
返回
}
func main(){
db,err:=gorm.Open(sqlite.Open(“hooks.db”),&gorm.Config{})
如果错误!=零{
死机(“连接数据库失败”)
}
db.AutoMigrate(&User{})
用户:=用户{
姓名:“布莱克”,
}
db.Create(&user)
fmt.Println(用户名)
user.Name=“泰勒”
db.Save(&user)
fmt.Println(用户名)
}
印刷品:

Steve
Sally

是的,正确,但我只是想看看它是否恐慌。它不会执行恐慌函数,因为钩子没有运行。是的,正确,但我只是想看看它是否恐慌。它不会执行恐慌函数,因为钩子没有运行。