处理 gorm
错误返回时,有一些错误是没有办法直接使用 errors.Is
来进行判断的,比如主键冲突的错误,直接使用 errors.Is(err, gorm.ErrDuplicatedKey)
是无法判断出主键冲突的错误返回的。
如果没有办法进行判断,为什么 gorm
要给这样一个 error
,但又不能使用呢?
gorm.io/driver/mysql
包中有一个 error_translator
的 go 文件
package mysql
import (
"github.com/go-sql-driver/mysql"
"gorm.io/gorm")
// The error codes to map mysql errors to gorm errors, here is the mysql error codes reference https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html.
var errCodes = map[uint16]error{
1062: gorm.ErrDuplicatedKey,
1451: gorm.ErrForeignKeyViolated,
1452: gorm.ErrForeignKeyViolated