Golang panic用法
阿新 • • 發佈:2018-12-13
Go語言追求簡潔優雅,所以,Go語言不支援傳統的 try…catch…finally 這種異常,因為Go語言的設計者們認為,將異常與控制結構混在一起會很容易使得程式碼變得混亂。因為開發者很容易濫用異常,甚至一個小小的錯誤都丟擲一個異常。在Go語言中,使用多值返回來返回錯誤。不要用異常代替錯誤,更不要用來控制流程。在極個別的情況下,也就是說,遇到真正的異常的情況下(比如除數為 0了)。才使用Go中引入的Exception處理:defer, panic, recover。
這幾個異常的使用場景可以這麼簡單描述:Go中可以丟擲一個panic的異常,然後在defer中通過recover捕獲這個異常,然後正常處理。
package main import "fmt" func main(){ defer func(){ // 必須要先宣告defer,否則不能捕獲到panic異常 fmt.Println("c") if err:=recover();err!=nil{ fmt.Println(err) // 這裡的err其實就是panic傳入的內容,55 } fmt.Println("d") }() f() } func f(){ fmt.Println("a") panic(55) fmt.Println("b") fmt.Println("f") } 輸出結果: a c d exit code 0, process exited normally.