如果发生错误,而我的golang应用程序没有';你不能处理它吗?

如果发生错误,而我的golang应用程序没有';你不能处理它吗?,go,go-gorm,Go,Go Gorm,我目前正在使用和。我想知道如果发生了错误,而我的应用程序无法处理,会发生什么 例如: if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil { // error handling... } 在上面的示例中,正在处理错误 if db.Model(&user).Related(&credit_card).RecordNotFound() { // no credit c

我目前正在使用和。我想知道如果发生了错误,而我的应用程序无法处理,会发生什么

例如:

if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil {
    // error handling...
}
在上面的示例中,正在处理错误

if db.Model(&user).Related(&credit_card).RecordNotFound() {
    // no credit card found error handling
}
在上面的下一个示例中,只处理
RecordNotFound()
错误,但是如果它抛出不同的错误呢?会发生什么

我的应用程序是否会自动响应500服务器内部错误,并且应用程序是否会继续正常运行

在上面的下一个示例中,只处理RecordNotFound()错误,但是如果它抛出不同的错误呢

如果您无法捕获错误,它将在代码上继续。错误不是一种特殊类型,它是一种简单的错误

我的应用程序是否会自动响应500服务器内部错误,并且应用程序是否会继续正常运行

如果围棋程序没有惊慌或者你返回了一个响应,那么就不会有响应。如果您想处理它,可以执行以下操作:

err := FunctionThatReturnsError()  
if err == myError.RecordNotFound() {
      panic("RecordNotFound")
} 


我不推荐恐慌法。如果你好奇谷歌为什么会这样。

Go没有例外。不是捕获异常,而是通过函数的返回值获取错误。因此,在幕后没有抛出或任何特殊情况,只有一个返回错误值的函数,和其他任何返回值一样,您可以放弃它

但我不建议放弃错误。如果您对如何处理错误感到懒惰或不知所措,只需将其记录下来:

log.Error(err)
您永远不知道您丢弃的错误是否导致了这个神秘的bug,您可以发誓它来自除您自己的代码之外的任何地方

我想知道如果发生了错误,而我的应用程序无法处理,会发生什么

那么应用程序的状态是未定义的。如果您不检查错误值,您的应用程序将使用未定义的值(指针可能为零,值可能为“零”),或者假设出现了副作用,但可能不会

假设您有一个签名为
func CreateStruct()(T,err)
并将其称为
t,:=CreateStruct()
(不检查错误)您不应该期望
t
变量设置正确的值。 如果有类似于
func Update()err
的函数,并且调用它时没有进行错误检查,则无法知道是否执行了更新

当然,一切都取决于API和实现。但你明白了

但是如果它抛出一个不同的错误呢

这是不可能的。Go中没有抛出错误机制。错误只能作为正常值返回



你应该永远不要懒于处理错误。这是编程中非常重要的一部分,Go使其更容易实现。

其他信息:当使用gin框架时,当出现恐慌时,它将自动响应500个内部服务器错误。
err := FunctionThatReturnsError()  
if err == myError.RecordNotFound() {
      c.JSON(500, "Record not found"}
} 
log.Error(err)