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来做判断好了
网友评论