golang中的db事务

时间:2014-10-27 17:59:51

标签: database transactions go

Go使用sql.DB进行自动提交,使用sql.Tx进行手动提交。一次性使用不是问题。问题是我有一个使用sql.DB来完成数据库工作的框架,现在我希望其中一些框架可以加入我的新事务,如果不修改现有框架来接受{{{}},那么这似乎并不容易。 1}}。我想知道在Go中是否真的没有一种简单的方法来进行自动/手动切换?

1 个答案:

答案 0 :(得分:2)

在不了解您正在使用哪个框架的情况下,我不认为有一种方法可以在不修改框架的情况下完成。您应该尝试获得您在框架中包含的修改,因为这里的主要问题是您使用的框架设计得很差。在编写新语言(特别是库或框架)时,您应该了解约定并相应地设计软件。

在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)
}

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