第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何處理 GORM 提交/回滾錯(cuò)誤

如何處理 GORM 提交/回滾錯(cuò)誤

Go
Smart貓小萌 2022-07-25 10:10:38
我剛剛發(fā)現(xiàn)在 GORM 中,事務(wù)提交可能會(huì)返回錯(cuò)誤,例如:tx := db.begin()// do somthing hereerr := tx.Commit().Error回滾時(shí)也會(huì)出現(xiàn)tx := db.begin()// do somthing hereerr := tx.Rollback().Error我想知道這個(gè)錯(cuò)誤是怎么發(fā)生的?如果發(fā)生,GORM 本身會(huì)做任何恢復(fù)功能來(lái)處理待處理的事務(wù)嗎?或者如果回滾或提交返回錯(cuò)誤,我是否有必要做些什么?順便說(shuō)一句,在 GORM 中是否有此類事務(wù)問(wèn)題的最佳實(shí)踐?
查看完整描述

2 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

我想知道這個(gè)錯(cuò)誤是怎么發(fā)生的?

在完全相同的情況下,您可能會(huì)從其他一些數(shù)據(jù)庫(kù)調(diào)用中收到錯(cuò)誤:

  • 網(wǎng)絡(luò)連接失敗

  • 數(shù)據(jù)庫(kù)、磁盤或硬件故障

  • 權(quán)限問(wèn)題

  • 命令中的語(yǔ)法錯(cuò)誤

  • 數(shù)據(jù)不一致錯(cuò)誤

對(duì)于Begin,您的錯(cuò)誤選項(xiàng)有些有限,因?yàn)椋ㄟ€)沒(méi)有可能不一致的數(shù)據(jù)。但是 forCommitRollback任何這些錯(cuò)誤都是可能的,以及沒(méi)有要提交的活動(dòng)事務(wù)的情況(因?yàn)橄惹暗腻e(cuò)誤,因?yàn)樗呀?jīng)提交,或者因?yàn)樗呀?jīng)回滾)。

如果發(fā)生,GORM 本身會(huì)做任何恢復(fù)功能來(lái)處理待處理的事務(wù)嗎?

不,GORM 不可能,因?yàn)樗恢滥膽?yīng)用程序邏輯。與所有類型的所有故障一樣,由程序員決定什么是適當(dāng)?shù)牟僮?。也許你應(yīng)該重試。也許你應(yīng)該只重試 N 次。也許您應(yīng)該忽略失敗并像成功一樣繼續(xù)。也許您應(yīng)該向用戶返回一個(gè)錯(cuò)誤。也許您應(yīng)該驚慌并崩潰整個(gè)程序。GORM 顯然無(wú)法知道正確的響應(yīng)。

或者如果回滾或提交返回錯(cuò)誤,我是否有必要做些什么?

正如我在上一段中所提到的,只有你才能知道這一點(diǎn)。您的應(yīng)用程序試圖做什么?萬(wàn)一發(fā)生故障,正確的做法是什么?

順便說(shuō)一句,在 GORM 中是否有此類事務(wù)問(wèn)題的最佳實(shí)踐?

這與 GORM 無(wú)關(guān)。處理錯(cuò)誤的“最佳實(shí)踐”只是簡(jiǎn)單地推斷錯(cuò)誤表示什么,以及在這種情況下您的應(yīng)用程序應(yīng)該做什么。


查看完整回答
反對(duì) 回復(fù) 2022-07-25
?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

這是代碼


func (db *DB) Rollback() *DB {

    if committer, ok := db.Statement.ConnPool.(TxCommitter); ok && committer != nil {

        if !reflect.ValueOf(committer).IsNil() {

            db.AddError(committer.Rollback())

        }

    } else {

        db.AddError(ErrInvalidTransaction)

    }

    return db

}

所以這只檢查tx實(shí)例是否是從Begin()方法生成的并且不是一個(gè)普通的*gorm.DB實(shí)例。所以在回滾的情況下,錯(cuò)誤檢查并不重要(但當(dāng)然推薦)


當(dāng)然.Commit(),您應(yīng)該檢查錯(cuò)誤,因?yàn)樘峤粫?huì)在事務(wù)期間進(jìn)行所有數(shù)據(jù)庫(kù)交互。因此,如果其中任何一個(gè)返回錯(cuò)誤.Commit(),則錯(cuò)誤將使您可以訪問(wèn)該錯(cuò)誤。


這是文檔https://gorm.io/docs/transactions.html#A-Specific-Example中使用它的示例


查看完整回答
反對(duì) 回復(fù) 2022-07-25
  • 2 回答
  • 0 關(guān)注
  • 448 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)