why, record not found ?

1. 运行环境

Golang 版本:1.17

2. 问题描述?

伪代码:

type AModel struct {
    ID uint
    // 在数据库为唯一性(索引)
    Name string
}

func GetName(c int) (n string, err error) {
    var m AModel
    for i := 0; i < c; i++ {
        n = "调用一个方法得到一个字符串"

        err = db.Where("`name` = ?", n).Select("id").First(&m).Error

        if m.ID > 0 {
            continue
        }

        // 判断是否 `record not found`,取反
        if !errors.Is(err, gorm.ErrRecordNotFound) {
            continue
        }

        m.Name = n

        err = db.Create(&m).Error

        if err != nil {
            continue
        }

        return
    }

    return
}

上面的 GetName 函数返回的 err,出现了少量的 record not found ? 但只有某一天出现,后面这个日志都未再现。对相应代码进行测试验证,未能复现。

3. 您期望得到的结果?

不会出现 record not found

4. 您实际得到的结果?

日志看确实是这里返回的出现 record not found

光年之外
讨论数量: 2
Summer

if !errors.Is(err, gorm.ErrRecordNotFound) 那里加个逻辑,把 sql log 记录下来。

2年前 评论
FM (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!