Go使用sql.DB
进行自动提交,使用sql.Tx
进行手动提交。一次性使用不是问题。问题是我有一个使用sql.DB
来完成数据库工作的框架,现在我希望其中一些框架可以加入我的新事务,如果不修改现有框架来接受{{{}},那么这似乎并不容易。 1}}。我想知道在Go中是否真的没有一种简单的方法来进行自动/手动切换?
答案 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.DB
和sql.Tx
隐式实现,因此在声明之后,您只需修改函数/方法以接受Queryer
类型而不是sql.DB
类型1}}。