1. 程式人生 > 實用技巧 >[Go] gorm 錯誤處理 與 鏈式/Finisher方法

[Go] gorm 錯誤處理 與 鏈式/Finisher方法

使用 gorm 在呼叫 Finisher 方法之後,建議都進行錯誤檢查。

Finishers 是會立即執行註冊回撥的方法,然後生成並執行 SQL,比如這些方法:

Create, First, Find, Take, Save, Update, Delete, Scan, Row, Rows…

完整方法列表https://github.com/go-gorm/gorm/blob/master/finisher_api.go
鏈式方法是將 Clauses 修改或新增到當前 Statement 的方法,例如:

Where、Select、Omit、Joins、Scopes、Preload、Raw(但在構建 SQL 語句時,Raw 不能與其它鏈式方法一起使用)…

完整方法列表
https://github.com/go-gorm/gorm/blob/master/chainable_api.go

建立記錄:

user := User{Name: "Jin", Age: 18, Birthday: time.Now()}

result := db.Create(&user) // 通過資料的指標來建立

user.ID             // 返回插入資料的主鍵
result.Error        // 返回 error
result.RowsAffected // 返回插入記錄的條數

處理錯誤:

GORM 的錯誤處理與常見的 Go 程式碼不同,因為 GORM 提供的是鏈式 API。

如果遇到任何錯誤,GORM 會設定*gorm.DBError欄位。

您需要像這樣檢查它:

if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil {
  // 處理錯誤...
}

或者 

if result := db.Where("name = ?", "jinzhu").First(&user); result.Error != nil {
  // 處理錯誤...
}

ErrRecordNotFound 錯誤

FirstLastTake方法找不到記錄時,GORM 會返回ErrRecordNotFound

錯誤。

如果發生了多個錯誤,你可以通過errors.Is判斷錯誤是否為ErrRecordNotFound,如:

// Check if returns RecordNotFound error
err := db.First(&user, 100).Error
errors.Is(err, gorm.ErrRecordNotFound)

Errors 錯誤

https://github.com/go-gorm/gorm/blob/master/errors.go

Link:https://www.cnblogs.com/farwish/p/14225964.html