第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如果發(fā)生錯誤并且我的 golang 應(yīng)用程序沒有處理它會發(fā)生什么?

如果發(fā)生錯誤并且我的 golang 應(yīng)用程序沒有處理它會發(fā)生什么?

Go
慕容3067478 2021-12-06 16:36:50
我目前正在使用gorm和gin 框架。我想知道如果發(fā)生錯誤并且我的應(yīng)用程序沒有處理它會發(fā)生什么?例子: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()處理了錯誤,但是如果它拋出一個不同的錯誤呢?會發(fā)生什么?我的應(yīng)用程序會自動響應(yīng) 500 服務(wù)器內(nèi)部錯誤嗎?應(yīng)用程序會繼續(xù)正常運行嗎?
查看完整描述

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

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


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

TA貢獻1818條經(jīng)驗 獲得超3個贊

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

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

log.Error(err)

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


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

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)。


查看完整回答
反對 回復(fù) 2021-12-06
  • 3 回答
  • 0 關(guān)注
  • 231 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號