GO語言中的異常處理

2021-10-12 17:50:06 字數 1620 閱讀 4100

go語言內建了乙個簡單的錯誤介面作為一種錯誤處理機制,介面定義如下:

type

error

inte***ce

它包含乙個 error() 方法,返回值為string

go的error構造有兩種方式,分別是

第一種:errors.new()

err := errors.

new(

"this is an error"

)if err !=

nil

第二種使用fmt.errorf()

err := fmt.

errorf

("this is an error"

)if err !=

nil

當然,除了直接使用go自帶的方法,還可以自定義錯誤。

下面以自然數函式作為例子:

type notnature float64

func

(err notnature)

error()

string

func

nature

(x float64)(

float64

,error

)else

}func

main()

1.如果函式需要處理異常,通常將error作為多值返回的最後乙個值,返回的error值為nil則表示無異常,非nil則是有異常。

2.一般先用if語句處理error!=nil,正常邏輯放if後面。

go語言的error代表的並不是真「異常」,只是通過返回error來表示錯誤資訊,換句話說,不是執行時錯誤範圍預定義的錯誤,某種不符合期望的行為並不會導致程式無法執行(自然數函式例子),都應使用error進行異常處理。當程式出現重大錯誤,如陣列越界,才會將其當成真正的異常,並用panic來處理。

go不使用try…catch方法來處理異常,而是使用panic和recover

func

main()

這時就只會輸出到" i am a error" 這裡,而後面的"hello,again!"則不會繼續執行。因為panic後面的程式不會被執行了。但是我們捕捉異常並不是為了停止程式(一般情況),而是為了讓程式能正常執行下去,這時候就到recover出場了。

package main

import

"fmt"

func

main()

fmt.

println

("我是defer裡面第二個列印函式")}

()f(

)}funcf(

)

這時輸出就為:

我是defer裡面第乙個列印函式

我是panic

我是defer裡面第二個列印函式

可以看到,函式一開始正常列印,當遇到panic,就會跳到defer函式,執行defer函式裡的內容。

需要注意的是,defer函式裡列印的err其實就是panic裡面的內容。

go語言基礎異常處理

異常處理模板 package main import fmt 異常處理 defer panic recover defer 表示延遲呼叫,即便程式出現嚴重錯誤,也會執行 panic 就是python中的raise 主動丟擲異常 recover 恢復程式,繼續執行 func main func f1 ...

在 Go 語言中處理 Unicode

如果 go 通常是指在公園散步,用go語言處理unicode碼可以描述為不小心走進了雷區,比如,如果我們要獲取從前端頁面的一句簡單字串 hello,世界 的長度.會得到什麼結果?1fmt.println len hello,世界 2 13 等下,剛才發生了什麼?長度難道不該是9麼?其他額外的4個字元...

Go 語言錯誤與異常處理

介紹 go 語言中錯誤與異常,進一步深入 錯誤與異常的區別以及實際開發中合適的處理方式。帶堆疊的錯誤資訊在開發與 bug 追蹤中都十分重要,可以幫助程式設計師更快定位錯誤發生位置。它擁有比標準庫中錯誤處理更豐富的處理方式,可謂程式設計師除錯之牛刀。在異常處理中,關鍵字 defer 與 recover...