说人话的 GORM文档 之 错误处理

14 min read

GORM 那傻逼文档真是傻逼妈妈给傻逼儿子开门,傻逼到家了

Finisher 方法

在 GORM 中,Finisher 方法是会立即执行注册回调的方法,然后生成并执行 SQL。例如,CreateFirstFindTakeSaveUpdateDeleteScanRowRows 等方法都属于 Finisher 方法。

我们鼓励您在调用任何 Finisher 方法后都进行错误检查,以确保操作执行成功。

如何处理错误

如果遇到任何错误,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 {
  // 处理错误...
}

错误类型的判断

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

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

此外,GORM 还会在其他情况下返回错误。例如,当执行数据库操作时发生错误,GORM 会将其设置为 *gorm.DBError 字段,你可以检查这个字段来获取错误信息。

错误类型

错误类型 描述
ErrRecordNotFound 记录未找到错误
ErrInvalidTransaction 当你尝试 CommitRollback 时,事务无效
ErrNotImplemented 未实现
ErrMissingWhereClause 缺少 where 子句
ErrUnsupportedRelation 不支持的关系
ErrPrimaryKeyRequired 需要主键
ErrModelValueRequired 需要模型值
ErrInvalidData 不支持的数据
ErrUnsupportedDriver 不支持的驱动程序
ErrRegistered 已注册
ErrInvalidField 无效字段
ErrEmptySlice 找到空切片
ErrDryRunModeUnsupported 不支持 dry run 模式
ErrInvalidDB 无效数据库
ErrInvalidValue 无效值,应为结构体或切片的指针
ErrInvalidValueOfLength 无效的关联值,长度不匹配
ErrPreloadNotAllowed 当使用 count 时不允许预加载