gorm RecordNotFound

gorm中, RecordNotFound()方法只能在结构体中使用,如果是slice类型,则不会报ErrRecordNotFound这个错误
先前写的时候发现result.RecordNotFound()这个方法没用,然后看看源码,
在callback_query.go中有以下逻辑:

if kind := results.Kind(); kind == reflect.Slice {
        isSlice = true
        resultType = results.Type().Elem()
        results.Set(reflect.MakeSlice(results.Type(), 0, 0))

        if resultType.Kind() == reflect.Ptr {
            isPtr = true
            resultType = resultType.Elem()
        }
    }
if err := rows.Err(); err != nil {
    scope.Err(err)
} else if scope.db.RowsAffected == 0 && !isSlice {
    scope.Err(ErrRecordNotFound)
}

如果RowsAffected为0并且不是slice类型才会有这个错误。
结构体中可以用ErrRecordNotFound()方法来做判断,如果是slice类型就用RowsAffected来做判断好了

你可能感兴趣的:(gorm RecordNotFound)