找不到实体并且错误仍然为零
Entity not found and err is still nil
我正在尝试通过令牌 select 实体。
var event models.Event
err := p.db.Preload("Groups.Participants").Find(&event, "token = ?", token).Error
return event, err
但是如果我传递一个空的 token
,例如。 "" 或另一个不存在的标记。我没有收到错误,我只是收到了一个未填充的事件。我可以检查是否 event.ID == 0 但我觉得这有点奇怪。我有点惊讶 err
仍然是零,即使没有找到任何实体。
我是不是做错了什么?有没有更好的方法来处理以上问题?
如果没有找到记录,Find
不会导致错误。 single object retrieval:
文档中的旁注提到了这一点
If you want to avoid the ErrRecordNotFound
error, you could use Find
like db.Limit(1).Find(&user)
, the Find
method accepts both struct and
slice data
如果你必须使用 Find
那么你必须自己检查是否没有记录,方法是在使用它检索单个对象时检查零值,或者在使用它时检查切片长度是否为零使用它来检索多个对象。但是,如果您只检索一个对象,那么我建议您使用 link 中记录的方法之一,即 First
、Take
或 Last
,如文档所示,当找不到满足查询的记录时,这些方法确实会导致 ErrRecordNotFound
错误。
我正在尝试通过令牌 select 实体。
var event models.Event
err := p.db.Preload("Groups.Participants").Find(&event, "token = ?", token).Error
return event, err
但是如果我传递一个空的 token
,例如。 "" 或另一个不存在的标记。我没有收到错误,我只是收到了一个未填充的事件。我可以检查是否 event.ID == 0 但我觉得这有点奇怪。我有点惊讶 err
仍然是零,即使没有找到任何实体。
我是不是做错了什么?有没有更好的方法来处理以上问题?
Find
不会导致错误。 single object retrieval:
If you want to avoid the
ErrRecordNotFound
error, you could useFind
likedb.Limit(1).Find(&user)
, theFind
method accepts both struct and slice data
如果你必须使用 Find
那么你必须自己检查是否没有记录,方法是在使用它检索单个对象时检查零值,或者在使用它时检查切片长度是否为零使用它来检索多个对象。但是,如果您只检索一个对象,那么我建议您使用 link 中记录的方法之一,即 First
、Take
或 Last
,如文档所示,当找不到满足查询的记录时,这些方法确实会导致 ErrRecordNotFound
错误。