91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go錯誤和異常CGO?fallthrough處理實例代碼分析

發布時間:2022-08-25 10:10:45 來源:億速云 閱讀:169 作者:iii 欄目:開發技術

本篇內容主要講解“Go錯誤和異常CGO fallthrough處理實例代碼分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Go錯誤和異常CGO fallthrough處理實例代碼分析”吧!

fallthrough

在一個 switch 塊內,每個 case 無需聲明 break 來終止,如果想順序執行使用fallthrough

如果我們想強制執行滿足條件case的后一個case,也可以通過設置fallthrough的方式:

代碼示例

package main
import "fmt"
func main() {
    switch {
    case false:
            fmt.Println("false1")
            fallthrough
    case true:
            fmt.Println("true1")
            fallthrough
    case false:
            fmt.Println("false2")
            fallthrough
    case true:
            fmt.Println("true2")
    case false:
            fmt.Println("false3")
            fallthrough
    default:
            fmt.Println("default case")
    }
}

思考一下上面代碼的執行結果是什么?

執行結果

Go錯誤和異常CGO?fallthrough處理實例代碼分析

注意:在一個switch塊內,都建議包含一個 default 語句并且放在最后,即使它什么代碼也沒有。

延伸知識點:在select塊中,default能避免死鎖問題。

CGO

CGO是調用C代碼模塊,靜態庫和動態庫。

CGO是C語言和Go語言之間的橋梁,原則上無法直接支持C++的類。CGO不支持C++語法的根本原因是C++至今為止還沒有一個二進制接口規范(ABI)。CGO只支持C語言中值類型的數據類型,所以我們是無法直接使用C++的引用參數等特性的。

錯誤&異常

錯誤指的是可能出現問題的地方出現了問題,比如打開一個文件時失敗,這種情況在人們的意料之中

異常指的是不應該出現問題的地方出現了問題,比如引用了空指針,這種情況在人們的意料之外。

可見,錯誤是業務過程的一部分,而異常不是 。

處理錯誤:error

Golang中引入error接口類型作為錯誤處理的標準模式,如果函數要返回錯誤,則返回值類型列表中肯定包含error。error處理過程類似于C語言中的錯誤碼,可逐層返回,直到被處理。

處理異常:panic&recover

Golang中引入兩個內置函數panic和recover來觸發和終止異常處理流程,同時引入關鍵字defer來延遲執行defer后面的函數。

panic&defer

當數組越界、訪問非法空間或者我們直接調用panic時,panic會停掉當前正在執行的程序,包括所有協程,比起exit直接退出,panic的退出更有秩序,他會他會先處理完當前goroutine已經defer掛上去的任務,執行完畢后再退出整個程序。

而defer的存在,讓我們有更多的選擇,比如在defer中通過recover截取panic,從而達到try…catch的效果

panic還可以接收一個參數,通常是字符串類型錯誤信息,執行到panic時,他會打印這個字符串和觸發他的調用戰。

當然,我們在寫代碼時要注意,不是所有的異常都能被捕獲到的,向fatal error 和runtime.throw 都是不能被recover的

defer執行順序

你可以在一個函數中執行多條defer語句,它們的執行順序與聲明順序相反。

總結

當程序運行時,如果遇到引用空指針、下標越界或顯式調用panic函數等情況,則先觸發panic函數的執行,然后調用延遲函數。調用者繼續傳遞panic,因此該過程一直在調用棧中重復發生:函數停止執行,調用延遲執行函數等。如果一路在延遲函數中沒有recover函數的調用,則會到達該攜程的起點,該攜程結束,然后終止其他所有攜程,包括主攜程(類似于C語言中的主線程,該攜程ID為1)。

對比Java、C++

錯誤和異常從Golang機制上講,就是error和panic的區別。很多其他語言也一樣,比如C++/Java,沒有error但有errno,沒有panic但有throw。

錯誤異常互相轉換

Golang錯誤和異常是可以互相轉換的:

  • 錯誤轉異常,比如程序邏輯上嘗試請求某個URL,最多嘗試三次,嘗試三次的過程中請求失敗是錯誤,嘗試完第三次還不成功的話,失敗就被提升為異常了。

  • 異常轉錯誤,比如panic觸發的異常被recover恢復后,將返回值中error類型的變量進行賦值,以便上層函數繼續走錯誤處理流程

到此,相信大家對“Go錯誤和異常CGO fallthrough處理實例代碼分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

夏邑县| 寿宁县| 桃江县| 百色市| 兴安县| 高密市| 沭阳县| 泽州县| 临沧市| 沁源县| 德阳市| 镇沅| 信丰县| 武安市| 丰顺县| 屏边| 阜平县| 五莲县| 武山县| 馆陶县| 无为县| 旌德县| 枞阳县| 桑植县| 松滋市| 垫江县| 齐河县| 北宁市| 鹿泉市| 靖州| 石阡县| 汝州市| 封丘县| 故城县| 安康市| 合川市| 宁武县| 长沙县| 葫芦岛市| 察隅县| 商都县|