1、文档
官方文档 Transactions | GORM - The fantastic ORM library for Golang, aims to be developer friendly.
2、先读再写
func UpdateUser(db *gorm.DB, id int64) error {
tx := db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
if err := tx.Error; err != nil {
return err
}
user := User{}
// 锁住指定 id 的 User 记录
if err := tx.Set("gorm:query_option", "FOR UPDATE").First(&user, id).Error; err != nil {
tx.Rollback()
return err
}
// 更新操作...
// commit事务,释放锁
if err := tx.Commit().Error; err != nil {
return err
}
return nil
}