Go对自动提交使用sql.DB
,对于手动提交使用sql.Tx
。这对于一次性使用来说不是问题。问题是我有一个框架,它使用sql.DB
来完成数据库工作,现在我想让他们中的一些人加入我的新事务,并且如果不修改现有框架以接受sql.Tx
,似乎并不那么容易。我想知道是否真的没有一种简单的方法来执行Go中的自动/手动切换?golang中的db交易
回答
不知道更多关于您正在使用的框架,我不认为有没有办法做到这一点,而不修改框架。您应该真的尝试获取框架中包含的修改,因为这里的主要问题是您正在使用的框架设计不佳。在编写新语言(特别是图书馆或框架)时,您应该了解这些约定并相应地设计您的软件。
在旅途中,它不是很难完成这个功能,你只需要声明的是这样的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
。
我在Java中传递我的连接(* sql.DB),我可以让客户决定他们是否想要加入事务,但是在进行时,这似乎是不可能的,因为如果客户端决定加入一个事务,他们必须使用* sql.Tx而不是* sql.DB,因此,我的接口中断了。 – 2014-10-28 20:26:06
@ElgsQianChen我不明白为什么界面打破了。有了这个接口,你可以将(Tx和DB)传递给一个函数或方法,它可以工作,但也许我不理解你的观点。 – Topo 2014-10-28 20:43:46
谢谢@Topo,我最终将Tx和DB都传递给了我的函数。它的作品,但看起来不那么优雅。 – 2014-10-29 06:55:47
- 1. Golang交易退出处理
- 2. 图Cosmos上的交易DB
- 3. 两个DB上的交易
- 4. Berkeley DB中的交易。快速?
- 5. 在C#中的交易中的交易#
- 6. 如何写入zend db交易
- 7. 多个OLE DB SSIS交易指令
- 8. Db在回调中的Yii2中的交易
- 9. ZF2中的Zend \ Db如何控制交易?
- 10. 交易中的ActiveRecord
- 11. jdbi中的交易
- 12. Oracle中的交易
- 13. SSIS中的交易
- 14. Grails中的交易
- 15. Lucene中的交易
- 16. REST中的交易?
- 17. 交易与非交易msmq
- 18. 交易SQLite中
- 19. Authnet CIM交易的交易ID
- 20. 开始交易...提交交易问题
- 21. 交易提交?
- 22. 数据到Munge:股票交易,交易所交易
- 23. @循环和DB持久风格的交易方法
- 24. mongo db复制的集合,以避免交易缺乏
- 25. 我如何检查DB是交易之间的锁定
- 26. 交易目的
- 27. 的AppEngine交易
- 28. MySQL的交易
- 29. Django的交易
- 30. NHibernate的交易
@rightføld,我不认为我写的与Java比较是无关紧要的。这是我希望的。我应该修改其他人的帖子,至少我会得到该帖子的权威所有者的批准。 – 2014-10-27 18:59:35
“一个框架” - 那是什么框架?知道这将有助于找到答案。还是它是你自己写的框架? – rob74 2014-10-28 08:52:12
@ElgsQianChen来自Stack Overflow文档(http://stackoverflow.com/help/editing):“如果您对您的贡献由其他可信用户进行协作编辑的想法感到不满意,则这可能不适合您“。 – Topo 2014-10-28 18:07:43