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 關注
- 242 瀏覽
添加回答
舉報