如果发生错误并且我的golang应用程序没有处理它会发生什么?

时间:2016-01-01 09:32:07

标签: go go-gorm

我目前正在使用gormgin framework。我想知道如果发生错误并且我的应用程序没有处理它会发生什么?

示例:

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服务器内部错误并且应用会继续正常运行吗?

3 个答案:

答案 0 :(得分:2)

  

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

如果您没有发现错误,它将继续执行代码。错误不是特殊类型,它是一个简单的struct

runhaskell SO.hs
  

我的应用会自动响应500服务器内部错误并且应用会继续正常运行吗?

如果go例程没有出现紧急情况或者您返回响应,则无响应。如果你想处理它,你可以这样做:

err := FunctionThatReturnsError()  
if err == myError.RecordNotFound() { // if err is not RecordNotFound then it won't enter the if simple as that. 
    // Do something.  
}  

// continue code.  

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

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

答案 1 :(得分:2)

Go没有例外。您可以通过函数的返回值获取错误,而不是捕获异常。因此,幕后没有投掷或任何特殊情况,只是一个返回错误值的函数,就像任何其他返回值一样 - 你可以丢弃它。

我不建议丢弃错误。如果您对如何处理错误感到懒惰或迷失 - 只需记录下来:

log.Error(err)

你永远不知道你丢弃的错误是否会导致你发誓的这个神秘的错误来自你自己的代码以外的任何地方。

答案 2 :(得分:1)

  

我想知道如果发生错误并且我的应用程序没有处理它会发生什么?

然后应用程序的状态未定义。如果您没有检查错误值,您的应用将使用未定义的值(指针可能为零,值为#34;零和#34;值)或假设发生了副作用,但可能没有。

我们假设你有一个签名为func CreateStruct() (T, err)的函数 并将其称为t, _ := CreateStruct()(不检查错误),您不应期望t变量具有正确的值集。 如果你有func Update() err这样的功能而你没有错误检查就调用它,那么你就不知道是否进行了更新。

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

  

但如果它引发了不同的错误呢?

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

你应该从不处理错误。它是编程中非常重要的部分,Go使其更容易实现。

相关问题