database - 未找到实体时的正确错误处理

标签 database go error-handling

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

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

我知道当没有找到实体时,谷歌的数据存储会返回错误。

现在我正在使用 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
    }
}

对于您的问题:

I'm wondering you can simply return nil as the value instead of returning an error

这真的取决于你的设计;所以如果你想分离你的数据库层,那么你仍然应该使用你自己导出的错误类型通知用户这个错误,让他们按照他们的意愿处理。

关于database - 未找到实体时的正确错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55372748/

相关文章:

python - 没有版本检查或 `six`,如何使用 `except MyError, e:`和 `except MyError as e`来与Python 2&3一起使用?

jquery - zend framework 2 - 响应错误消息的最佳方法

java - 如何停止正在进行的 java.sql.statement.executeQuery()?

go - 无法从 channel 获取值

go - Golang 中的接口(interface)和指针之旅 #55 和 #57

networking - 如何知道 net.Listener 何时正确关闭?

exception - Camel : onException vs. 拦截SendToEndpoint

php - 在 PHP 中的 Mysql 数据库查询中使用外部参数

java - 使用 Java (Java EE/Java SE) 的数据库应用程序设计模式

mysql - 类别属性的数据库模式困惑