go中painc 異常處理

語言: CN / TW / HK

異常處理區別

Golang這麼時尚的語言是沒有類似try..catch 這種異常處理機制,而是使用 panic 和 recover處理異常. 其實相當於python的raise。 golang的異常處理組合 panic,defer,recover,跟java中的try catch finially是類似的。

示例

必須注意:

1.   defer 需要放在 panic 之前定義,另外recover只有在 defer 呼叫的函式中才有效。
2.   recover處理異常後,邏輯並不會恢復到 panic 那個點去,函式跑到 defer 之後的那個點.
3.   多個 defer 會形成 defer 棧,後定義的 defer 語句會被最先呼叫

//panic (直接報錯,讓程式崩潰直接中止)和recover 
func funA(){
	fmt.Println("A")
}
func funB(){
	//嘗試恢復錯誤,讓程式繼續執行。
	defer func(){
		err:=recover()
		fmt.Println(err)
		fmt.Println("釋放資料庫連線")
	}()  // 加() 表示這個函式會執行
	panic("出現在了嚴重錯誤")
	fmt.Println("B")
}
func funC(){
	fmt.Println("C")
}