30 lines
788 B
Go
30 lines
788 B
Go
/**
|
||
* package utils
|
||
* 作用:数据库相关的通用工具函数
|
||
*/
|
||
package utils
|
||
|
||
import (
|
||
"errors"
|
||
"strings"
|
||
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
/**
|
||
* IsDuplicateEntryError
|
||
* 功能:判断是否为唯一索引冲突错误(MySQL 错误码 1062)。
|
||
* 为什么需要:依赖唯一索引做并发兜底的写入(如点赞、消息删除记录)
|
||
* 需要把"重复插入"当作幂等成功处理。GORM 的 ErrDuplicatedKey 依赖驱动
|
||
* Translate 支持,部分配置下返回的是原始 mysql 错误,需按错误文本兜底判断
|
||
*/
|
||
func IsDuplicateEntryError(err error) bool {
|
||
if err == nil {
|
||
return false
|
||
}
|
||
if errors.Is(err, gorm.ErrDuplicatedKey) {
|
||
return true
|
||
}
|
||
return strings.Contains(err.Error(), "Duplicate entry") || strings.Contains(err.Error(), "1062")
|
||
}
|