是否可以在一个事务中调用Go函数



我在PostgreSQL中存储了一个双链表。我有一个Go API来管理这个列表。

有一个函数可以创建新的Node(在特定位置(。假设其中有一个INSERT SQL查询

此外,还有一个删除Node(按id(的函数。假设里面有一个DELETE SQL查询

众所周知,如果您需要将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个函数复制粘贴到第三个函数(

p.s这个想法很简单:您有两个函数来执行一些SQL查询,并且您需要在一个事务中执行这些查询(或者在一个交易中调用两个函数(

在这里更好的方法是将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) {
//...
}

这应该奏效。

最新更新