go-gf框架两个表以事务方式写入示例

news/2024/11/8 23:03:00/

下面是对每一行代码的中文解释:

// 创建数据库连接对象
var tx gdb.TX

这行代码声明了一个名为tx的变量,类型为gdb.TX,表示数据库事务对象。

// 开启事务
if tx, err = g.DB().Ctx(ctx).Begin(ctx); err == nil {

这行代码通过在数据库连接(g.DB())上调用Begin方法以给定的上下文(ctx)开始一个事务。如果没有错误(err == nil),则将返回的事务对象赋值给变量tx

// 获取当前时间
CurrentTime := gtime.Now()

这行代码使用gtime.Now()函数获取当前时间,并将其赋值给变量CurrentTime

// 写支付记录
_, err4 := dao.PayTradeOrder.Ctx(ctx).TX(tx).Insert(appdo.PayTradeOrder{// 支付记录字段...
})

这行代码将一个新的支付记录插入数据库。它使用dao.PayTradeOrder.Ctx(ctx).TX(tx)指定了上下文和事务对象,然后使用Insert方法将appdo.PayTradeOrder结构体的字段插入数据库。

// 写套餐订单记录
_, err5 := systemdao.UserBuySetMeal.Ctx(ctx).TX(tx).Insert(do.UserBuySetMeal{// 套餐订单记录字段...
})

这行代码将一条新的套餐订单记录插入数据库。它使用systemdao.UserBuySetMeal.Ctx(ctx).TX(tx)指定了上下文和事务对象,然后使用Insert方法将do.UserBuySetMeal结构体的字段插入数据库。

// 提交事务
if err := tx.Commit(); err != nil {// 处理提交事务错误liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:提交事务失败"), "创建下单错误:提交事务失败")return
}

这行代码提交事务。如果提交事务发生错误,会通过liberr.ErrIsNil函数处理错误。

// 打印结果
fmt.Println("事务操作完成")

这行代码打印结果信息,输出"事务操作完成"。

} else {// 处理开启事务错误liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:事务操作失败"), "创建下单错误:事务操作失败")
}

这行代码处理开启事务错误,通过liberr.ErrIsNil函数处理错误。

完整代码 供参考

// 创建数据库连接对象var tx gdb.TX// 开启事务if tx, err = g.DB().Ctx(ctx).Begin(ctx); err == nil {// 获取当前时间CurrentTime := gtime.Now()// 写支付记录_, err4 := dao.PayTradeOrder.Ctx(ctx).TX(tx).Insert(appdo.PayTradeOrder{OrderNo:        "2023245231231",                         // 订单号//写入其他数据字段})if err4 != nil {// 回滚事务err := tx.Rollback()if err != nil {liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:创建支付数据回滚事务错误"), "创建下单错误:创建支付数据回滚事务错误")return}// 处理错误liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:创建支付数据错误"), "创建下单错误:创建支付数据错误")return}// 写套餐订单记录_, err5 := systemdao.UserBuySetMeal.Ctx(ctx).TX(tx).Insert(do.UserBuySetMeal{UserId:         userid,                                // 用户id//写入其他数据字段})if err5 != nil {// 回滚事务err := tx.Rollback()if err != nil {liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:创建套餐订单回滚事务数据错误"), "创建下单错误:创建套餐订单回滚事务数据错误")return}// 处理错误liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:创建套餐订单数据错误"), "创建下单错误:创建套餐订单数据错误")return}// 提交事务if err := tx.Commit(); err != nil {// 处理提交事务错误liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:提交事务失败"), "创建下单错误:提交事务失败")return}// 打印结果fmt.Println("事务操作完成")} else {// 处理开启事务错误liberr.ErrIsNil(context.Background(), errors.New("创建下单错误:事务操作失败"), "创建下单错误:事务操作失败")}

http://www.ppmy.cn/news/77914.html

相关文章

Python appium搭建app自动化测试环境

目录 前言 App自动化环境安装 安装安卓开发工具 安装模拟器 前言 appium做app自动化测试,环境搭建是比较麻烦的。 也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎。 但没有成功的环境,就没有办法继续后续的使用。 在app自…

2023 年互联网就业怎样?

来说说我们公司最近的情况: 15K的Java后端程序员,岗位发布一天,收到简历212份; 28K的高级全栈工程师,岗位发布6小时,收到简历349份; 技术主管不信邪,200/天的Python实习生&#xff…

2023-05-24:为什么要使用Redis做缓存?

2023-05-24:为什么要使用Redis做缓存? 答案2023-05-24: 缓存的好处 买啤酒和喝啤酒的例子可以帮助我们理解缓存的好处。 假设你在超市里买了一箱啤酒,如果你需要每次想喝啤酒就去超市购买,无疑会浪费很多时间和精力…

OpenCV的40道入门选择题

以下哪个库可以在Python中使用OpenCV? A. numpy B. matplotlib C. scipy D. all of the above 答案:D 解析:numpy、matplotlib和scipy都是与OpenCV一起使用的常用库。 在OpenCV中,以下哪个函数用于加载图像? A. cv2.i…

Python3安装pyhanlp最佳解决方法

1、Hanlp介绍 Hanlp是一款中文自然语言处理工具。Hanlp支持多种自然语言处理任务,包括分词、词性标注、命名实体识别、依存句法分析、情感分析、文本分类等。其主要优点包括: 高准确率:Hanlp采用了基于神经网络的分词方法,有效提…

炸金花底层模拟

一.说明 经常刷视频,看到一个有意思的项目,非常适合练手,今天这里我们实现炸金花的底层模拟。 二.游戏规则 1.一副扑克牌去掉大小王,剩下52张牌2.参与游戏的玩家每人发三张牌3.比较每个人手中牌的大小4.若三张牌相同&#xff0…

IP 查询/手机在网状态等热门API大全分享

IP 归属地查询 IP归属地-IPv4区县级:根据IP地址查询归属地信息,包含43亿全量IPv4,支持到中国地区(不含港台地区)区县级别,含运营商数据。IP归属地-IPv6区县级:根据IP地址(IPv6版本&…

C语言代码封装MQTT协议报文,了解MQTT协议通信过程

【1】MQTT协议介绍 MQTT是一种轻量级的通信协议,适用于物联网(IoT)和低带宽网络环境。它基于一种“发布/订阅”模式,其中设备发送数据(也称为 “发布”)到经纪人(称为MQTT代理)&…