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則是有異常。go語言的error代表的並不是真「異常」,只是通過返回error來表示錯誤資訊,換句話說,不是執行時錯誤範圍預定義的錯誤,某種不符合期望的行為並不會導致程式無法執行(自然數函式例子),都應使用error進行異常處理。當程式出現重大錯誤,如陣列越界,才會將其當成真正的異常,並用panic來處理。2.一般先用if語句處理error!=nil,正常邏輯放if後面。
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...