[Go] gorm 錯誤處理 與 鏈式/Finisher方法
阿新 • • 發佈:2021-01-03
使用 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.DB
的Error
欄位。
您需要像這樣檢查它:
if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil { // 處理錯誤... } 或者 if result := db.Where("name = ?", "jinzhu").First(&user); result.Error != nil { // 處理錯誤... }
ErrRecordNotFound 錯誤
當First
、Last
、Take
方法找不到記錄時,GORM 會返回ErrRecordNotFound
如果發生了多個錯誤,你可以通過errors.Is
判斷錯誤是否為ErrRecordNotFound,如:
// Check if returns RecordNotFound error err := db.First(&user, 100).Error errors.Is(err, gorm.ErrRecordNotFound)
Errors 錯誤