Go語言(十)錯誤處理

2021-09-29 18:01:03 字數 2690 閱讀 7746

go語言中使用error介面處理異常,兩個內建函式panic()和recover()以報告和處理執行時錯誤和程式中的錯

誤場景,乙個defer關鍵字來處理順序執行。

go語言使用介面error處理異常。

type

error

inte***ce

該介面處於errors包下,只有以下內容:

package errors

func

new(text string

)error

}type errorstring struct

func

(e *errorstring)

error()

string

可以直接使用new函式定義乙個錯誤資料:

func

main()

l,err:=

walk(10

)if err==

nil fmt.

println

(err)

}func

walk

(i int

)(s string

,err error

)return

"no"

,errors.

new(

"this is false")}

//ok

//this is false

呼叫 errors.new 函式是非常稀少的,因為有乙個方便的封裝函式 fmt.errorf,它還會處理字串格式化。

package fmt

import

"errors"

func

errorf

(format string

, args ...

inte***ce

)error

如下:

func

main()

}func

run(s string

)error

fmt.

println

("ok"

)return

nil}

//錯誤,hello資料長度過短

defer 關鍵字將語句延遲執行,在defer所在的函式即將返回或者說結束時,將defer語句執行。

如果有多個被defer修飾的語句,那麼以棧(後進先出)的方式執行,即逆序執行。

func

main()

func

hello

(i int

)func

ok(i int

)

主函式執行完畢即將結束時,hello()函式從hello(3)開始執行,在hello(3)即將結束時執行ok(7),然後hello(2),hello(1)按照順序逆序執行。

start do ..

end do..

hello 3

hello3函式結束啦

yes 7

hello 2

hello2函式結束啦

yes 7

hello 1

hello1函式結束啦

yes 7

go語言引入了兩個內建函式panic()和recover()以報告和處理執行時錯誤和程式中的錯 誤場景:

funcpanic(inte***ce{})

funcrecover() inte***ce{}

當在乙個函式執行過程中呼叫panic()函式時,正常的函式執行流程將立即終止,但函式中 之前使用defer關鍵字延遲執行的語句將正常展開執行,錯誤資訊將被報 告,包括在呼叫panic()函式時傳入的引數,這個過程稱為錯誤處理流程。

func

main()

宕機之前的defer語句仍然執行

宕機也要執行的語句

panic: 錯誤,宕機

goroutine 1 [running]:

main.main()

e:/goproject/aone/src/panicdemo.go:10 +0x147

process finished with exit code 2

recover()函式用於終止錯誤處理流程。一般情況下,recover()應該在乙個使用defer

關鍵字的函式中執行以有效擷取錯誤處理流程。

func

main()

()defer fmt.

println

("宕機也要執行的語句"

)defer fmt.

println

("宕機之前的defer語句仍然執行"

)panic

("錯誤,宕機"

) fmt.

println

("no........"

)}

宕機之前的defer語句仍然執行

宕機也要執行的語句

捕獲資料: 錯誤,宕機

GO 語言 錯誤處理

1 go錯誤處理機制,沒有try,catch 處理方式是 defer,panic,recover go丟擲乙個panic的異常,然後在defer中通過recover捕獲這個異常func test a 1 b 0 c a b c 1 0 捕獲不到 fmt.println c error main.go...

Go語言20 錯誤處理

go 語言通過內建的錯誤介面提供了非常簡單的錯誤處理機制。error型別是乙個介面型別,這是它的定義 type error inte ce我們可以在編碼中通過實現 error 介面型別來生成錯誤資訊。函式通常在最後的返回值中返回錯誤資訊。使用errors.new 可返回乙個錯誤資訊 func sqr...

Go 錯誤處理

error型別是乙個介面型別,也是乙個go語言的內建型別。在這個介面型別的宣告中只包含了乙個方法error。這個方法不接受任何引數,但是會返回乙個string型別的結果。它的作用是返回錯誤資訊的字串表示形象。我們使用error型別的方式通常是,在函式宣告結果列表的最後,宣告乙個該型別的結果。同時在呼...