找不到实体时正确的错误处理

时间:2019-03-27 08:32:07

标签: database go error-handling

我正在编写一个具有数据库包的Go应用程序。现在,在数据库包中,可以调用几种方法来基于某些字段获取实体。

我想知道当找不到实体时Go中错误处理的最佳实践是什么。我应该在自己的数据库包中返回错误还是返回nil作为值?

我知道没有找到实体时google的数据存储区会返回错误。

现在我正在使用Header,并且在找不到任何实体时也会返回错误。

我想知道您可以简单地返回Header's作为值而不返回错误。我错过了一点吗?

2 个答案:

答案 0 :(得分:0)

如果您使用的是gorm,则有专门针对此功能;

// IsRecordNotFoundError returns true if error contains a RecordNotFound error
func IsRecordNotFoundError(err error) bool {}

您可以按以下方式使用它:

err = db.Find(object).Error
if err != nil {
    if gorm.IsRecordNotFoundError(err) {
        // handle object not found
    } else {
        return err
    }
}

以及您的问题:

  

我想知道您可以简单地将nil作为值而不是返回错误

这实际上取决于您的设计;因此,如果要分离数据库层,则仍应使用自己导出的错误类型将此错误通知用户,并让他们根据需要进行处理。

答案 1 :(得分:0)

您可以使用以下代码:

  user:=&User{}
  if db.First(&user, "username=?", mobile).RecordNotFound() {
     return nil
  }
  return user