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

相關文章
相關標籤/搜索