Database 未找到实体时的正确错误处理
我正在编写一个Go应用程序,它有一个数据库包。现在,在数据库包中有两种方法,您可以调用它们来基于某些字段获取实体 我想知道当找不到实体时,Go中错误处理的最佳实践是什么。我应该在自己的数据库包中返回错误,还是返回nil作为值 我知道google的数据存储在找不到实体时返回错误 现在我使用的是Database 未找到实体时的正确错误处理,database,go,error-handling,Database,Go,Error Handling,我正在编写一个Go应用程序,它有一个数据库包。现在,在数据库包中有两种方法,您可以调用它们来基于某些字段获取实体 我想知道当找不到实体时,Go中错误处理的最佳实践是什么。我应该在自己的数据库包中返回错误,还是返回nil作为值 我知道google的数据存储在找不到实体时返回错误 现在我使用的是gorm,当找不到实体时,它也会返回错误 我想知道您是否可以简单地返回nil作为值,而不是返回错误。我是否遗漏了一点?如果您使用的是gorm,则有一个专门用于此的函数;即 // IsRecordNotFoun
gorm
,当找不到实体时,它也会返回错误
我想知道您是否可以简单地返回
nil
作为值,而不是返回错误。我是否遗漏了一点?如果您使用的是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作为值,而不是返回错误 这真的取决于你的设计;因此,如果要分离数据库层,则仍应使用您自己导出的错误类型通知用户此错误,并让他们按照自己的意愿处理此错误。您可以使用以下代码:
user:=&User{}
if db.First(&user, "username=?", mobile).RecordNotFound() {
return nil
}
return user
这里没有“最佳实践”。只有意见。做对应用程序有意义的事情。“可以简单地将nil作为值返回,而不是返回错误”?是的,从语法上讲,如果返回类型是指针类型,
nil
是该类型的有效值。至于你是否应该,这完全是基于意见。gorm.IsRecordNotFoundError
现在被删除。看看这个: