Gorm-事务锁定(二)
在使用事务锁定时,需要注意避免死锁的发生。死锁是指两个或多个goroutine在等待对方释放锁定资源的情况下
(资料图片仅供参考)
使用事务锁定避免死锁
在使用事务锁定时,需要注意避免死锁的发生。死锁是指两个或多个goroutine在等待对方释放锁定资源的情况下,陷入了一种互相等待的状态。为了避免死锁的发生,我们应该在进行事务锁定时,按照一定的顺序对数据进行加锁。
下面是一个使用事务锁定避免死锁的示例:
package mainimport ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm")type Account struct { ID uint Balance float64}func main() { dsn := "user:password@tcp(host:port)/database" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic(err) } defer db.Close() tx := db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() var account1, account2 Account if err := tx.Set("gorm:query_option", "FOR UPDATE").Where("id = ?", 1).First(&account1).Error; err != nil { tx.Rollback() panic(err) } if err := tx.Set("gorm:query_option", "FOR UPDATE").Where("id = ?", 2).First(&account2).Error; err != nil { tx.Rollback() panic(err) } if account1.Balance < 100.00 { tx.Rollback() panic("insufficient balance") } account1.Balance -= 100.00 if err := tx.Save(&account1).Error; err != nil { tx.Rollback() panic(err) } account2.Balance += 100.00 if err := tx.Save(&account2).Error; err != nil { tx.Rollback() panic(err) } tx.Commit()}
在这个示例中,我们定义了一个Account结构体,表示账户信息。我们使用Set
方法设置查询选项,并使用Where
方法查询id为1和2的账户信息,并将查询结果存储在变量account1
和account2
中。
我们按照id的大小对两个账户进行加锁,这样可以避免两个goroutine对同一组数据进行加锁,从而避免死锁的发生。接下来,我们检查账户1的余额是否足够,如果不足,则进行回滚操作。
然后,我们分别将账户1的余额减去100元,账户2的余额加上100元,并使用Save
方法将修改后的账户信息写入数据库。
最后,我们使用Commit
方法提交事务。
关键词:
责任编辑:hnmd003
精彩推荐
- 物美启用便利店双品牌 北京市场格局生变
- 南水北调河南供水范围将扩大
- 内地房企海伦堡拟赴港上市
- 双“11”大数据出炉了 洛阳人爱买啥?
- 京津冀多地遭遇大气重污染 专家为您详...
- 郑州新密一家具厂发生火灾,厂房被毁
最近更新
- Gorm-事务锁定(二)
- 全球消息!韩安冉小猪先生连麦(韩安冉...
- 国家知识产权商标局_国家商标知识产权网...
- decline的动词形式_declined 环球聚焦
- 如何做苏打饼干_自制苏打饼干方法_环球关注
- 3个月赚回一年收入,旅游人忙成了007,...
- 泰克资源(TECK.US)撤销分拆计划表决 仍...
- 受房地产下行“拖累” 百强物业企业发...
- 天天新资讯:中国卫生集团(00673)延长收...
- 车展对话|冯擎峰+毛京波:电动车时代...
- 天天头条:[年报]兰卫医学2022年净利润6...
- 全球实时:展现妇女家庭美好风采 “钱...
- 每日热闻!极目寻亲 | 替子寻亲多年,...
- 全球快资讯:翰宇药业:2023年第一季度...
- 新能源强势上涨 人工智能概念分化 ...
- 【蔡国庆代言元气森林,谁给“土洋结合...
- 浙商银行6.33%股份司法拍卖流拍
- 基金投顾竞速:东方、华泰、中信挺进“...
- 佳源国际控股(02768)将终止票据交换要约...
- 上海临港第一季度收入10.02亿元 房地产...
- “第一资源”人才如何助力“大零号湾”...
- 美股前瞻 | 三大股指期货齐涨 盘后Me...
- 通用汽车一季度增收不增利,在华销量同...
- 建设银行行长张金良: 加大资源倾斜力...
- 全球看热讯:连花清瘟狂卖68亿元 ...
- 全球金融观察|美国债务上限拉响红色警...
- 纺织大亨杀入地产,南通亚伦土豪式拿地...
- “五一”约起,巴东土店子乡村游“九大...
- 百事通!城市IPO季度观察丨一季度新增68...
- 首届抖音生活服务生态伙伴大会成都举办...
阅读排行
-
国家知识产权商标局_国家商标知识产权网-天天热议
上一篇2023-04-27 02:05:34