亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果發生錯誤并且我的 golang 應用程序沒有處理它會發生什么?

如果發生錯誤并且我的 golang 應用程序沒有處理它會發生什么?

Go
慕容3067478 2021-12-06 16:36:50
我目前正在使用gorm和gin 框架。我想知道如果發生錯誤并且我的應用程序沒有處理它會發生什么?例子: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 回答

?
瀟瀟雨雨

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"}

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


查看完整回答
反對 回復 2021-12-06
?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

Go 沒有例外。不是捕獲異常,而是通過函數的返回值獲取錯誤。所以在幕后沒有拋出或任何特殊的事情,只是一個返回錯誤值的函數,就像任何其他返回值一樣 - 你可以丟棄它。

不過,我不建議丟棄錯誤。如果您對如何處理錯誤感到懶惰或迷茫 - 只需記錄它:

log.Error(err)

你永遠不知道你丟棄的錯誤是否導致了這個神秘的錯誤,你可以發誓它來自除你自己的代碼之外的任何地方。


查看完整回答
反對 回復 2021-12-06
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

我想知道如果發生錯誤并且我的應用程序沒有處理它會發生什么?

然后應用程序的狀態是未定義的。如果您不檢查錯誤值,您的應用程序將使用未定義的值(指針可能為零,值可能為“零”)或假設發生了副作用,但可能不會。

假設您有一個帶有簽名的函數func CreateStruct() (T, err) 并像這樣調用它t, _ := CreateStruct()(不檢查錯誤),您不應該期望t變量具有正確的值集。如果您有類似的功能func Update() err并且在沒有錯誤檢查的情況下調用它,那么您將無法知道是否執行了更新。

當然,一切都取決于 API 和實現。但是你明白了。

但是如果它拋出一個不同的錯誤呢?

不可能。Go 中沒有拋出錯誤機制。錯誤只能作為正常值返回。


永遠不應該懶惰處理錯誤。這是編程中非常重要的部分,Go 使它更容易實現。


查看完整回答
反對 回復 2021-12-06
  • 3 回答
  • 0 關注
  • 242 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號