Mat*_*ark 11 transactions go sql-server-2008 gorp
所以我不能太具体,但我认为我能告诉你的就足以解决这个问题了.首先,我正在使用gorp进行设置并获得交易.我正在使用github.com/denisenkom/go-mssqldb
驱动程序.
然后我经历了一系列的操作,如果他们失败我rollback
,如果一切都成功我commit
.问题是它只会回滚失败的语句而不是其他操作.我错了,这不是假设工作的方式吗?
这是一些粗略的psudocode,让你更好地了解我在说什么:
trans,err := dbmap.Begin()
//assume all errors are received and checked before continuing
id := trans.Exec("insert thing") //successful, persists after rollback
thing := trans.Select("Select thing") //successful
trans.Exec("update other_thing with thing") //successful, persists after rollback
newthing := trans.Exec("insert new_thing with thing") //fails, rollsback
if err != nil{
trans.Rollback() //No errors
return
}
trans.Commit()
Run Code Online (Sandbox Code Playgroud)
我错了,那应该是rollback
一切dbmap.Begin()
吗?这是驱动程序实现中的错误吗?我们非常欢迎任何和所有的帮助.谢谢!
更新
测试了https://play.golang.org/p/0L3Vgk8C_F,它起作用,所以我猜这意味着它与gorp有关.我正在使用v1分支,因为这将很快生产,因此稳定性是关键.我将通过它,但看起来它只是轻轻地包裹它.