是否可以在一笔交易中调用 Go 函数?

我在 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 个函数)


一只萌萌小番薯
浏览 94回答 1
1回答

慕的地8271018

解决此问题的更好方法是将 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) {    //...}这应该可以解决问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go