panic # 存取越界、空指標參考等,這些運行時錯誤會造成panic異常。
golang中沒有try ... catch...這類異常捕獲語句,但是提供了panic和recover內建函數,用於拋出異常以及異常的捕獲。• panic、 recover 參數類型為 interface{},因此可拋出任何類型物件。 • 如果程式出現了致命的錯誤,導致整個程式無法進行下去,golang提供了panic函數,用來實現程式的退出。
• 當程式發生 panic 時,使用 recover 可以重新獲得對該程式的控
制。
• 不是所有的panic異常都來自運行時,直接呼叫內建的panic函數也會引發panic異常
• panic函數接受任何值作為參數。
(1)panic的使用①延遲調試中引發的錯誤,可被後續延遲調試捕獲,但僅最後錯誤可被捕獲。 func test() {defer func() {
fmt.Println(recover())
}()defer func() {
panic("defer panic")
}()
panic("test panic")
}func main() {
test() //defer panic}
如果函數沒有 panic,呼叫 recover 函數不會取得任何訊息,也不會影響目前進程。
demopackage mainimport ( "fmt")func fullName(firstName *string, lastName *string) { if firstName == nil { panic("Firsr Name can't be null") } if lastName == nil { panic("Last Name can't be null") } fmt.Printf("%s %s\n", *firstName, *lastName) fmt.Println("returned normally from fullName") }func test(){ defer fmt.Println("deferred call in test") firName := "paul" fullName(&firName, nil) }func main() { defer fmt.Println("deferred call in main") test() fmt.Println("returned normally from main") }
以上是golang panic可以捕捉標準錯誤嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!