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 选项。
➡️