返回顶部
首页 > 资讯 > 后端开发 > GO >在不同的 DAO 中使用相同的 DB 事务
  • 922
分享到

在不同的 DAO 中使用相同的 DB 事务

2024-04-04 23:04:49 922人浏览 泡泡鱼
摘要

本篇文章给大家分享《在不同的 DAO 中使用相同的 DB 事务》,覆盖了golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的

本篇文章给大家分享《在不同的 DAO 中使用相同的 DB 事务》,覆盖了golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我的一个 Golang 应用程序中有一个用例,用于更新 api 中的多个表,如果其中一个更新失败,我希望回滚所有以前的更新(java 中的 @transactional 就是这样做的)。 我尝试按以下方式进行操作:

func (d *dao) method1(opt string) error {
    tx, err := d.db.begintx(context.background(), nil)
    if err != nil {
        return errors.errorf("unable to start transaction")
    }
    err := d.dao1.update1(opt)
        if err != nil {
            log.infof("error : %s. rolling back transaction", err)
            _ = tx.rollback()
            log.infof("transaction rolled back while update 1")
            return err
        }
        err = d.dao2.update2(opt)
        if err != nil {
            log.errorf("error in making update 2 "+
                "error %v ", err)
            _ = tx.rollback()
            log.infof("transaction rolled back while update 2")
            return err
        }
    }
}


func(d *dao1) update1 error {
        var query = "update t1 set c1 = ? where id = ?"
        _, err := d.db.exec(query, "v1", "v2")
        return err
}

func(d *dao2) update2 error {
        var query = "update t2 set c2 = ? where id = ?"
        _, err := d.db.exec(query, "v1", "v2")
        return err
}

但这不起作用,因为我们正在 update1 和 update2 方法中创建新事务。 所以我尝试在方法 update1 和 update2 的方法参数中传递事务,如下所示:

func Update1(tx sql.Tx) error {
    var query = "update T1 set C1 = ? where id = ?"
    _, err := tx.Exec(query, "v1", "v2")
    return err
}

但问题是在某些用例中我只想调用方法 update1 。那么,在 update1 方法中传递的交易值应该是多少?

或者有更好的方法吗?有人可以帮忙吗?


正确答案


如果我理解正确,在某些情况下,您希望调用 update1 但不调用 update2,而在其他情况下,您希望两个更新都发生。如果是这样的话,那么我建议这更多是一个设计问题,而不是 tx 的使用问题。我认为设计两个函数,每个函数都描述您期望的行为,并将调用哪个函数的逻辑委托给调用者,可能会起作用。类似于:

func Caller() error {
    if condition {
        return UpdateOne()
    }
    return UpdateBoth()
}

func UpdateOne() error { … }
func UpdateBoth() error { … }

到这里,我们也就讲完了《在不同的 DAO 中使用相同的 DB 事务》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注编程网公众号,带你了解更多关于的知识点!

您可能感兴趣的文档:

--结束END--

本文标题: 在不同的 DAO 中使用相同的 DB 事务

本文链接: https://lsjlt.com/news/596234.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在不同的 DAO 中使用相同的 DB 事务
    本篇文章给大家分享《在不同的 DAO 中使用相同的 DB 事务》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的...
    99+
    2024-04-04
  • Java和Laravel:如何在两种不同的语言中使用相同的对象?
    随着互联网技术的不断发展,Java和Laravel这两种编程语言在Web开发领域中的应用越来越广泛。Java作为一种面向对象的编程语言,具有强大的跨平台性和稳定性,而Laravel则是一种基于PHP语言的Web应用框架,具有简单易用、高效...
    99+
    2023-06-23
    laravel 对象 numy
  • 怎么在Linux中切换相同程序的不同版本
    这篇文章主要为大家展示了“怎么在Linux中切换相同程序的不同版本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么在Linux中切换相同程序的不同版本”这篇文章吧。使用 update-alte...
    99+
    2023-06-16
  • JavaScript中call和apply的相同点和不同点
    这篇文章主要讲解了“JavaScript中call和apply的相同点和不同点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中call和...
    99+
    2024-04-02
  • 在不同的 go 版本中使用 ginkgo
    php小编百草为您介绍如何在不同的Go版本中使用Ginkgo。Ginkgo是一个强大的Go语言测试框架,它提供了丰富的特性和灵活的语法,使得编写和运行测试变得更加简单高效。然而,在不同...
    99+
    2024-02-09
    go语言
  • SQL SERVER 下,批量在不同的数据库中执行相同的脚本
    转自:https://blog.51cto.com/liuxinya/354983 作为DBA我们经常需要对不同的数据库执行相同的查询,如果你的服务器上只有2个数据库当然可以手工依次执行,但如果一个数据库服务器上有几百个库呢,你是否觉得会崩...
    99+
    2018-06-20
    SQL SERVER 下,批量在不同的数据库中执行相同的脚本 数据库入门 数据库基础教程 数据库 mysql
  • 为什么使用相同的种子会得到不同的随机数?
    问题内容 我正在使用具有以下 mwe 的 numpy 随机数生成器: import numpy as np np.random.seed(40) print(np.random.ran...
    99+
    2024-02-22
  • Linux 中如何切换相同程序的不同版本
    几天前,我们曾经讨论如何 如何在不同的 php 版本之间进行切换 。在那篇文章中,我们使用 update-alternatives 命令实现从一个 PHP 版本切换到另一个 PHP 版本。也就是说, update-alt...
    99+
    2022-06-04
    linux 切换程序版本 linux 切换版本
  • 服务器和云服务器的相同点和不同点
    云服务器和云服务器是两个不同的概念,它们的相同点和不同点如下: 相同点: - 云服务器都是由云提供商提供的云基础设施,通常使用公有云或者私有云。 - 云服务器都是云提供商提供的云基础设施,通常使用公有云或者私有云。 不同点: - 云服务器...
    99+
    2023-10-26
    不同点 服务器 相同点
  • 在 PHP 中,不同类型的函数如何相互作用?
    在 php 中,函数之间可以通过参数传递和返回值交互:参数传递:函数通过参数接收其他函数或外部源的数据。返回值:函数通过返回值向调用函数返回数据或状态信息。这使得我们可以创建模块化、可重...
    99+
    2024-04-18
    类型转换 函数调用
  • 利用Java怎么获取集合中相同与不同的元素
    利用Java怎么获取集合中相同与不同的元素?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。语法 removeAll(Collection<> c)c:包含从列表中移除...
    99+
    2023-05-30
    java
  • Typescript中interface与type的相同点与不同点是什么
    今天小编给大家分享一下Typescript中interface与type的相同点与不同点是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-07-04
  • 如何在PHP和JavaScript中使用相同的数据类型?
    PHP和JavaScript都是非常流行的编程语言,它们有许多相似之处,例如它们都支持许多相同的数据类型。在本文中,我们将介绍如何在PHP和JavaScript中使用相同的数据类型。 数组 数组是一种非常常见的数据类型,它可以在PHP...
    99+
    2023-11-14
    函数 javascript 数据类型
  • java中抽象类和接口的相同和不同点介绍
    目录前言一、抽象类是什么?二、接口是什么?三、抽象类和接口的异同点总结前言 本文简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例。 一、抽象类是什么? 在 Java 语言中使...
    99+
    2024-04-02
  • 数据库中不同的隔离级别对事务处理有哪些不同
    这篇文章给大家分享的是有关数据库中不同的隔离级别对事务处理有哪些不同的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离...
    99+
    2024-04-02
  • 相同update语句在MySQL,Oracle的不同表现(r12笔记第30天)
       今天有个朋友问我一个SQL问题,大体是一个update语句,看起来逻辑没有问题,但是执行的时候却总是报错。 语句和报错信息为: UPDATE paymen...
    99+
    2024-04-02
  • 如何在 ASP 中使用不同的数据类型?
    ASP 是一种广泛使用的服务器端脚本语言,用于构建动态网站和 Web 应用程序。在 ASP 中,使用不同的数据类型是非常常见的。本文将介绍如何在 ASP 中使用不同的数据类型,以及如何正确地声明和使用它们。 声明变量 在 ASP 中,声...
    99+
    2023-07-10
    数据类型 http npm
  • 服务器和云服务器的相同点和不同点有哪些
    云服务器和云服务器是两个不同的概念,它们的相同点和不同点如下: 相同点: - 云服务器都是由云主机或者云计算服务提供商创建,是一个虚拟机,能够在云平台上进行快速、便捷、可靠的计算和存储。 - 云服务器提供高性能、高可用性、高扩展性和弹性等...
    99+
    2023-10-27
    不同点 服务器 相同点
  • java中抽象类和接口的相同和不同点是什么
    这篇文章将为大家详细讲解有关java中抽象类和接口的相同和不同点是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言下面简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例。一、抽象...
    99+
    2023-06-22
  • 不允许在函数参数中使用相同底层基本类型的类型
    哈喽!今天心血来潮给大家带来了《不允许在函数参数中使用相同底层基本类型的类型》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万...
    99+
    2024-04-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作