我在 PostgreSQL 中存储了一个双链表。我有一个 Go API 来管理这个列表。有一个函数可以创建新的Node(在特定位置)。假设其中有一个 INSERT SQL 查询。此外,还有一个删除Node(按 id)的功能。假设其中有一个 DELETE SQL 查询。众所周知,如果您需要将 a 移动Node到不同的位置,您应该调用 DeleteNode() 函数和 CreateNode() 函数。所以有第三个函数叫做 MoveNode()func MoveNode() error { if err := DeleteNode(); err != nil { return err } if err := CreateNode(); err != nil { return err } return nil}但是这些函数(位于 MoveNode() 内部)应该在一个事务中调用。有没有办法在 Go 中“合并”函数?或者解决这个问题的方法是什么(除了从2个函数复制和粘贴代码到第三个)?ps 这个想法很简单:你有两个函数执行一些 SQL 查询,你需要在一个事务中执行这些查询(或在一个事务中调用 2 个函数)
1 回答

慕的地8271018
TA贡献1796条经验 获得超4个赞
解决此问题的更好方法是将 tx.Commit() 移到查询执行函数之外(此处为 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) {
//...
}
这应该可以解决问题。
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消