为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
一只萌萌小番薯 2022-05-18 13:39:12
我在 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) {

    //...

}

这应该可以解决问题。


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号