3 回答

TA貢獻1833條經(jīng)驗 獲得超4個贊
在上面的下一個例子中,只處理了 RecordNotFound() 錯誤,但如果它拋出一個不同的錯誤怎么辦?
如果您沒有發(fā)現(xiàn)錯誤,它將繼續(xù)執(zhí)行代碼。錯誤不是特殊類型,它是一個簡單的結(jié)構(gòu)
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.
我的應(yīng)用程序會自動響應(yīng) 500 服務(wù)器內(nèi)部錯誤嗎?應(yīng)用程序會繼續(xù)正常運行嗎?
如果 go 例程沒有恐慌或者您返回響應(yīng),則不會有任何響應(yīng)。如果你想處理它,你可以這樣做:
err := FunctionThatReturnsError()
if err == myError.RecordNotFound() {
panic("RecordNotFound")
}
或者
err := FunctionThatReturnsError()
if err == myError.RecordNotFound() {
c.JSON(500, "Record not found"}
}
我不推薦恐慌方法。如果你好奇谷歌為什么。

TA貢獻1818條經(jīng)驗 獲得超3個贊
Go 沒有例外。不是捕獲異常,而是通過函數(shù)的返回值獲取錯誤。所以在幕后沒有拋出或任何特殊的事情,只是一個返回錯誤值的函數(shù),就像任何其他返回值一樣 - 你可以丟棄它。
不過,我不建議丟棄錯誤。如果您對如何處理錯誤感到懶惰或迷茫 - 只需記錄它:
log.Error(err)
你永遠(yuǎn)不知道你丟棄的錯誤是否導(dǎo)致了這個神秘的錯誤,你可以發(fā)誓它來自除你自己的代碼之外的任何地方。

TA貢獻1804條經(jīng)驗 獲得超3個贊
我想知道如果發(fā)生錯誤并且我的應(yīng)用程序沒有處理它會發(fā)生什么?
然后應(yīng)用程序的狀態(tài)是未定義的。如果您不檢查錯誤值,您的應(yīng)用程序?qū)⑹褂梦炊x的值(指針可能為零,值可能為“零”)或假設(shè)發(fā)生了副作用,但可能不會。
假設(shè)您有一個帶有簽名的函數(shù)func CreateStruct() (T, err)
并像這樣調(diào)用它t, _ := CreateStruct()
(不檢查錯誤),您不應(yīng)該期望t
變量具有正確的值集。如果您有類似的功能func Update() err
并且在沒有錯誤檢查的情況下調(diào)用它,那么您將無法知道是否執(zhí)行了更新。
當(dāng)然,一切都取決于 API 和實現(xiàn)。但是你明白了。
但是如果它拋出一個不同的錯誤呢?
不可能。Go 中沒有拋出錯誤機制。錯誤只能作為正常值返回。
你永遠(yuǎn)不應(yīng)該懶惰處理錯誤。這是編程中非常重要的部分,Go 使它更容易實現(xiàn)。
- 3 回答
- 0 關(guān)注
- 231 瀏覽
添加回答
舉報