Qia*_*hen 5 database transactions go
在 Java 中,很容易在数据库事务的自动提交和手动提交之间切换。当我说简单时,我的意思是它不需要更改连接接口。只需将AutoCommit 设置为true 或false 即可在自动/手动模式之间切换事务。但是,Go 使用不同的连接接口,sql.DB 用于自动模式,而 sql.Tx 用于手动模式。一次性使用这不是问题。问题是我有一个框架,它使用 sql.DB 来做 db 工作,现在我想让其中一些加入我的新事务,如果不修改现有框架以接受 sql.Tx,这似乎并不容易。我想知道是否真的没有一种简单的方法可以在 Go 中进行自动/手动切换?
在不了解您正在使用哪个框架的情况下,我认为没有办法在不修改框架的情况下做到这一点。您真的应该尝试将您所做的修改包含在框架中,因为这里的主要问题是您使用的框架设计得很差。在为新语言(特别是库或框架)编写代码时,您应该了解约定并相应地设计您的软件。
在 go 中,实现这个功能并不难,你只需要像这样声明Queryer(或者你想调用它的方式)接口:
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)
}
Run Code Online (Sandbox Code Playgroud)
这个接口是隐式实现的sql.DB,sql.Tx所以在声明它之后,你只需要修改函数/方法来接受Queryer类型而不是 a sql.DB。