29 lines
426 B
Go
29 lines
426 B
Go
package utils
|
|
|
|
import (
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// WithTransaction 执行一个包含事务的操作
|
|
func WithTransaction(db *gorm.DB, fn func(tx *gorm.DB) error) error {
|
|
tx := db.Begin()
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
tx.Rollback()
|
|
panic(r)
|
|
}
|
|
}()
|
|
|
|
if err := fn(tx); err != nil {
|
|
tx.Rollback()
|
|
return err
|
|
}
|
|
|
|
if err := tx.Commit().Error; err != nil {
|
|
tx.Rollback()
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|