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