全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

GORM 错误类型识别

GORM 返回标准错误类型,使用 errors.Is 可准确判断错误类型,本文介绍常见 GORM 错误与处理方法。

GORM 错误常量

GORM 定义了一系列错误常量:

Go
import "gorm.io/gorm"

// 常见错误
gorm.ErrRecordNotFound      // 记录未找到
gorm.ErrInvalidTransaction  // 无效事务
gorm.ErrDryRunModeUnsupported // 不支持 DryRun
gorm.ErrMissingWhereClause  // 缺少 WHERE 条件
gorm.ErrUnsupportedRelation // 不支持的关联关系

错误类型识别

使用 errors.Is 判断错误类型:

Go
import (
    "errors"
    "gorm.io/gorm"
)

var user User
err := db.First(&user, 1).Error

if errors.Is(err, gorm.ErrRecordNotFound) {
    fmt.Println("记录未找到")
} else if err != nil {
    fmt.Printf("其他错误: %v\n", err)
}

常见使用场景

Go
// 场景1: 查询记录
err := db.Where("email = ?", email).First(&user).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
    return nil, fmt.Errorf("用户不存在")
}

// 场景2: 更新记录
err := db.Model(&User{}).Where("id = ?", id).Update("name", name).Error
if errors.Is(err, gorm.ErrMissingWhereClause) {
    return fmt.Errorf("缺少 WHERE 条件")
}

错误处理对照

错误类型触发场景处理建议
ErrRecordNotFoundFirst/Take/Last 未找到记录返回 404 或创建新记录
ErrInvalidTransaction事务未开始或已提交检查事务状态
ErrMissingWhereClauseDelete/Update 缺少 WHERE补充条件或使用 Unscoped
ErrCheckConstraintViolated约束检查失败检查数据完整性

不要使用字符串匹配判断错误,始终使用 errors.Is

要点总结

  • GORM 定义标准错误常量如 ErrRecordNotFound
  • 使用 errors.Is(err, gorm.ErrXxx) 判断错误类型
  • 不要字符串匹配,使用标准库 errors.Is
  • 根据错误类型采取不同处理策略

文章存放路径:D:\git2\jwdev\articles\GORM\进阶\错误处理与日志\错误类型识别.md

📝 发现内容有误?点击此处直接编辑

← 上一篇 GORM 日志配置与输出
下一篇 → GORM Jaeger 链路追踪插件
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库