首页/ 学科题库/ gorm/ GORM 错误类型识别
gorm 实战教程

GORM 错误类型识别

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

想在手机上练这篇的配套题目?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别下方二维码,即可解锁本讲对应真题与错题本。
了解产品 App
← 上一篇 GORM 查询钩子实现 下一篇 → GORM 数据库错误处理