找不到实体并且错误仍然为零

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 中记录的方法之一,即 FirstTakeLast,如文档所示,当找不到满足查询的记录时,这些方法确实会导致 ErrRecordNotFound 错误。