我在 PostgreSQL 中存儲(chǔ)了一個(gè)雙鏈表。我有一個(gè) Go API 來(lái)管理這個(gè)列表。有一個(gè)函數(shù)可以創(chuàng)建新的Node(在特定位置)。假設(shè)其中有一個(gè) INSERT SQL 查詢。此外,還有一個(gè)刪除Node(按 id)的功能。假設(shè)其中有一個(gè) DELETE SQL 查詢。眾所周知,如果您需要將 a 移動(dòng)Node到不同的位置,您應(yīng)該調(diào)用 DeleteNode() 函數(shù)和 CreateNode() 函數(shù)。所以有第三個(gè)函數(shù)叫做 MoveNode()func MoveNode() error { if err := DeleteNode(); err != nil { return err } if err := CreateNode(); err != nil { return err } return nil}但是這些函數(shù)(位于 MoveNode() 內(nèi)部)應(yīng)該在一個(gè)事務(wù)中調(diào)用。有沒有辦法在 Go 中“合并”函數(shù)?或者解決這個(gè)問(wèn)題的方法是什么(除了從2個(gè)函數(shù)復(fù)制和粘貼代碼到第三個(gè))?ps 這個(gè)想法很簡(jiǎn)單:你有兩個(gè)函數(shù)執(zhí)行一些 SQL 查詢,你需要在一個(gè)事務(wù)中執(zhí)行這些查詢(或在一個(gè)事務(wù)中調(diào)用 2 個(gè)函數(shù))
1 回答

慕的地8271018
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
解決此問(wèn)題的更好方法是將 tx.Commit() 移到查詢執(zhí)行函數(shù)之外(此處為 DeleteNode() 和 CreateNode())
建議的解決方案:
func MoveNode() error {
tx, err := db.Begin()
// err handling
res, err := DeleteNode(tx)
// err handling
res, err := CreateNode(tx)
// err handling
tx.Commit()
}
func DeleteNode(transactionFromDbBegin) (responseFromExec, errorFromExec) {
//...
}
func CreateNode(transactionFromDbBegin) (responseFromExec, errorFromExec) {
//...
}
這應(yīng)該可以解決問(wèn)題。
- 1 回答
- 0 關(guān)注
- 117 瀏覽
添加回答
舉報(bào)
0/150
提交
取消