go語言中使用error介面處理異常,兩個內建函式panic()和recover()以報告和處理執行時錯誤和程式中的錯go語言使用介面error處理異常。誤場景,乙個defer關鍵字來處理順序執行。
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型別的方式通常是,在函式宣告結果列表的最後,宣告乙個該型別的結果。同時在呼...