在 Go 中,处理错误是很重要的。

我们鼓励您在调用任何 Finisher 方法 后,都进行错误检查

处理错误

GORM 的错误处理与常见的 Go 代码不同,因为 GORM 提供的是链式 API。

如果遇到任何错误,GORM 会设置 *gorm.DBError 字段,您需要像这样检查它:

  1. if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil {
  2. // 处理错误...
  3. }

或者

  1. if result := db.Where("name = ?", "jinzhu").First(&user); result.Error != nil {
  2. // 处理错误...
  3. }

ErrRecordNotFound

FirstLastTake 方法找不到记录时,GORM 会返回 ErrRecordNotFound 错误。如果发生了多个错误,你可以通过 errors.Is 判断错误是否为 ErrRecordNotFound,例如:

  1. // 检查错误是否为 RecordNotFound
  2. err := db.First(&user, 100).Error
  3. errors.Is(err, gorm.ErrRecordNotFound)

Dialect Translated Errors

If you would like to be able to use the dialect translated errors(like ErrDuplicatedKey), then enable the TranslateError flag when opening a db connection.

  1. db, err := gorm.Open(postgres.Open(postgresDSN), &gorm.Config{TranslateError: true})

Errors

Errors List