转自:https://blog.csdn.net/juzipidemimi/article/details/104502385
仅做个人备份,浏览请看原文
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
}