3 回答
TA贡献1833条经验 获得超4个赞
在上面的下一个例子中,只处理了 RecordNotFound() 错误,但如果它抛出一个不同的错误怎么办?
如果您没有发现错误,它将继续执行代码。错误不是特殊类型,它是一个简单的结构
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.
我的应用程序会自动响应 500 服务器内部错误吗?应用程序会继续正常运行吗?
如果 go 例程没有恐慌或者您返回响应,则不会有任何响应。如果你想处理它,你可以这样做:
err := FunctionThatReturnsError()
if err == myError.RecordNotFound() {
panic("RecordNotFound")
}
或者
err := FunctionThatReturnsError()
if err == myError.RecordNotFound() {
c.JSON(500, "Record not found"}
}
我不推荐恐慌方法。如果你好奇谷歌为什么。
TA贡献1818条经验 获得超3个赞
Go 没有例外。不是捕获异常,而是通过函数的返回值获取错误。所以在幕后没有抛出或任何特殊的事情,只是一个返回错误值的函数,就像任何其他返回值一样 - 你可以丢弃它。
不过,我不建议丢弃错误。如果您对如何处理错误感到懒惰或迷茫 - 只需记录它:
log.Error(err)
你永远不知道你丢弃的错误是否导致了这个神秘的错误,你可以发誓它来自除你自己的代码之外的任何地方。
TA贡献1804条经验 获得超3个赞
我想知道如果发生错误并且我的应用程序没有处理它会发生什么?
然后应用程序的状态是未定义的。如果您不检查错误值,您的应用程序将使用未定义的值(指针可能为零,值可能为“零”)或假设发生了副作用,但可能不会。
假设您有一个带有签名的函数func CreateStruct() (T, err)
并像这样调用它t, _ := CreateStruct()
(不检查错误),您不应该期望t
变量具有正确的值集。如果您有类似的功能func Update() err
并且在没有错误检查的情况下调用它,那么您将无法知道是否执行了更新。
当然,一切都取决于 API 和实现。但是你明白了。
但是如果它抛出一个不同的错误呢?
不可能。Go 中没有抛出错误机制。错误只能作为正常值返回。
你永远不应该懒惰处理错误。这是编程中非常重要的部分,Go 使它更容易实现。
- 3 回答
- 0 关注
- 192 浏览
添加回答
举报