gpt4 book ai didi

database - golang 中的数据库事务

转载 作者:IT王子 更新时间:2023-10-29 01:43:04 24 4
gpt4 key购买 nike

在 Java 中,很容易在数据库事务的自动提交和手动提交之间切换。当我说简单时,我的意思是它不需要更改连接接口(interface)。只需将 AutoCommit 设置为 true 或 false 即可在自动/手动模式之间切换事务。但是,Go 使用不同的连接接口(interface),sql.DB 用于自动模式,而 sql.Tx 用于手动模式。一次性使用不是问题。问题是我有一个使用 sql.DB 来做数据库工作的框架,现在我想让它们中的一些加入我的新事务,如果不修改现有框架来接受 sql.Tx 似乎并不那么容易。我想知道是否真的没有一种简单的方法可以在 Go 中进行自动/手动切换?

最佳答案

在不了解您使用的框架的更多信息的情况下,我认为没有办法在不修改框架的情况下做到这一点。您真的应该尝试将所做的修改包含在框架中,因为这里的主要问题是您使用的框架设计不佳。在为一种新语言(特别是库或框架)编写代码时,您应该了解约定并相应地设计您的软件。

在 go 中,实现此功能并不难,您只需像这样声明 Queryer(或者您想要调用它的任何方式)接口(interface):

type Queryer interface {
Query(string, ...interface{}) (*sql.Rows, error)
QueryRow(string, ...interface{}) *sql.Row
Prepare(string) (*sql.Stmt, error)
Exec(string, ...interface{}) (sql.Result, error)
}

此接口(interface)由 sql.DBsql.Tx 隐式实现,因此在声明它之后,您只需修改函数/方法以接受 Queryer 类型而不是 sql.DB

关于database - golang 中的数据库事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26593867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com