Go圣经-临时插入ORM的小trick

上一篇 Go圣经-学习笔记之基础数据类型golang

下一篇 Go圣经-学习笔记之复合类型框架

有关orm的指针传递trick

好比:咱们用beego框架中的orm模型,使用了事务,则确定会遇到事务的开始、提交和回滚操做。那么跨方法或者函数,你是怎么作的呢?这里有一个小trick,你们能够参考下:函数

func AddSaleOrder(so *SaleOrder, o *orm.Orm) (retCode int, err error) {
    if o==nil {
        oo:=orm.NewOrm()
        o=&oo
    }
    if err = (*o).Begin(); err ==nil{
        defer func(){
           if err != nil{
                (*o).Rollback()
           } else if err = (*o).Commit(); err !=nil{
               retCode = consts.DB__COMMIT_ERROR
           }
        }()
    }
    return
}

if retCode, err = AddSaleOrder(so, nil); err !=nil{
    ...
}

咱们分析下这段代码,两种状况:学习

  • 若是AddSaleOrder函数的参数o=nil,则新起一个事务,且Begin方法不会报错。则会在函数执行结束后执行Rollback或者Commit操做。
  • 若是AddSaleOrder函数的参数o!=nil, 则函数外面已经新起了一个事务,咱们就不须要建立orm对象了,而后若是开启了Begin,则函数内的Begin操做会返回error,则函数结束后不会执行defer。那就表示事务不会在函数体内提交。

结论:有时候还真是须要好好停下来想一想,能不能尽可能的改善代码质量, 同时让代码尽量地美观好看.net

相关文章
相关标签/搜索