gorm 中 MySQL 错误码映射与主键冲突错误处理

💡 原文中文,约2400字,阅读约需6分钟。
📝

内容提要

在处理 `gorm` 错误时,主键冲突错误无法直接用 `errors.Is` 判断。可以通过 `gorm.io/driver/mysql` 的 `Translate` 函数将 MySQL 错误码转换为 `gorm` 错误,从而有效判断插入冲突。

🎯

关键要点

  • 处理 gorm 错误时,主键冲突错误无法直接用 errors.Is 判断。
  • 可以通过 gorm.io/driver/mysql 的 Translate 函数将 MySQL 错误码转换为 gorm 错误。
  • Translate 函数用于将 mysql error 转化为 gorm error。
  • 主键冲突错误出现在插入时,gorm 的 Create 方法调用 AddError 函数。
  • AddError 函数中通过 db.Dialector.(ErrorTranslator) 进行断言,调用对应的 Translate 函数。
  • 需要将 gorm.DB 的 Dialector 替换为 gorm.io/driver/mysql 的 Dialector,以便使用 errors.Is 判断插入冲突。
  • 在创建 gorm.DB 时传入 mysql.Dialector 实例,并开启 TranslateError 选项。
➡️

继续阅读