golang基礎教程(十四)異常處理

2021-09-10 06:01:29 字數 2135 閱讀 9111

golang基礎教程

編寫的程式難免有異常,異常分為:

編譯時異常:在編譯時丟擲的異常,編譯不通過,語法使用錯誤,符號填寫錯誤等等。。。

執行時異常:在程式執行時丟擲的異常,這個才是我們將要說的,程式執行時,有很多狀況發生,例如:讓使用者輸入乙個數字,可使用者偏偏輸入乙個字串,導致的異常,陣列的下標越界,空指標等等。。。。

乙個簡單的執行時異常場景…

package main

import

"fmt"

func

test

(a int

,b int

)int

func

main()

結果:

panic: runtime error: integer divide by zero

goroutine 1 [running]:

出錯**:

a = b / a

解決方法:

1、新增判斷

這種事比較常見的作法,將每種異常都考慮到,然後做出響應的處理

package main

import

("errors"

"fmt"

)func

test

(a int

,b int)(

int,

error

) a = b / a

return a,err

}func

main()

else

}

當a=0返回值中的err不為nil

2、捕捉異常

異常的場景會有很多,會很難統計出來,或統計出來後出來很麻煩;此時我們就要對異常進行捕捉

這裡將用到defer和recover

defer:延時執行,即在方法執行結束(出現異常而結束或正常結束)時執行

recover:恢復的意思,如果是異常結束程式不會中斷,返回異常資訊,可以根據異常來做出相應的處理

recover必須放在defer的函式中才能生效

package main

import

("fmt"

)func

test

(a int

, b int

)int()

a = b / a

return a

}func

main()

結果:

err: runtime error: integer divide by zero

====main方法正常結束!!==== 0

這裡可以看到程式正常結束,並且也捕捉到了異常資訊,在recover那可以處理異常

3、手動丟擲異常

看到異常總覺得很討厭,但有的時候它能幫助我們解決很多麻煩事,比如使用者輸入錯誤,就應該丟擲異常,可以讓這個異常一層層的返回給呼叫方的程式,使其不能繼續執行,從而起到保護後面業務的目的,也簡化了錯誤資訊的傳遞,例如:

乙個人取錢,賬戶只有100元,他輸入了200元,從輸入到賬戶扣款經過了20個方法呼叫,那總不能將這個err傳遞這麼次,傳到起始的呼叫處把?,後面的扣款業務也不能執行的

所以這裡用丟擲異常比較合適(當然這只是乙個例子)

這裡會用到panic:恐慌,驚慌,丟擲異常終止程式執行的

package main

import

("errors"

"fmt"

)func

test

(a int

)int

fmt.

println

("*****==賬戶扣款*****"

)return i

}func

main()

結果:

panic: 賬戶金額不足!!!!

goroutine 1 [running]:

Golang語言基礎教程 switch分支語句

程式的流程控制結構一共有三種 順序結構,選擇結構,迴圈結構。switch是乙個條件語句,它計算表示式並將其與可能匹配的列表進行比較,並根據匹配執行 塊。它可以被認為是一種慣用的方式來寫多個if else子句。switch 語句用於基於不同條件執行不同動作,每乙個 case 分支都是唯一的,從上直下逐...

Golang語言基礎教程 if分支語句

程式的流程控制結構一共有三種 順序結構,選擇結構,迴圈結構。順序結構 從上向下,逐行執行。選擇結構 條件滿足,某些 才會執行。0 1次 分支語句 if,switch,select 迴圈結構 條件滿足,某些 會被反覆的執行多次。0 n次 迴圈語句 for 語法格式 if 布林表示式 if 布林表示式 ...

Golang語言基礎教程 函式的引數

形式引數 定義函式時,用於接收外部傳入的資料,叫做形式引數,簡稱形參。實際引數 呼叫函式時,傳給形參的實際的資料,叫做實際引數,簡稱實參。函式呼叫 a 函式名稱必須匹配 b 實參與形參必須一一對應 順序,個數,型別 go函式支援變參。接受變參的函式是有著不定數量的引數的。為了做到這點,首先需要定義函...