我正在编写一个具有数据库包的Go应用程序。现在,在数据库包中,可以调用几种方法来基于某些字段获取实体。
我想知道当找不到实体时Go中错误处理的最佳实践是什么。我应该在自己的数据库包中返回错误还是返回nil作为值?
我知道没有找到实体时google的数据存储区会返回错误。
现在我正在使用Header
,并且在找不到任何实体时也会返回错误。
我想知道您可以简单地返回Header's
作为值而不返回错误。我错过了一点吗?
答案 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