有效的錯誤處理是 Go 中穩健應用程式開發的基石,特別是在使用 GORM 與資料庫互動時。GORM 對錯誤處理的方法受到其可串接 API 的影響,需要細緻的理解。
基本錯誤處理
GORM 將錯誤處理整合到其可串接方法語法中。*gorm.DB
實例包含一個 Error
欄位,當錯誤發生時會設定此欄位。常見的做法是在執行資料庫操作後檢查此欄位,特別是在 終結方法之後。
在方法串接後,檢查 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
。
err := db.First(&user, 100).Error |
處理錯誤代碼
許多資料庫會傳回具有特定代碼的錯誤,這些代碼可能表示各種問題,例如約束違規、連線問題或語法錯誤。在 GORM 中處理這些錯誤代碼需要解析資料庫傳回的錯誤並擷取相關代碼
- 範例:處理 MySQL 錯誤代碼
import ( |
方言轉換的錯誤
當啟用 TranslateError
時,GORM 可以傳回與所使用的資料庫方言相關的特定錯誤,GORM 會將特定於資料庫的錯誤轉換為其自己的概括錯誤。
db, err := gorm.Open(postgres.Open(postgresDSN), &gorm.Config{TranslateError: true}) |
- ErrDuplicatedKey
當插入操作違反唯一約束時,會發生此錯誤
result := db.Create(&newRecord) |
- ErrForeignKeyViolated
當外來鍵約束被違反時會發生此錯誤
result := db.Create(&newRecord) |
透過啟用 TranslateError
,GORM 提供更統一的方式來處理不同資料庫的錯誤,將資料庫特定的錯誤轉換為常見的 GORM 錯誤類型。
錯誤
有關 GORM 可能回傳的完整錯誤清單,請參閱 GORM 文件中的 錯誤清單。