func panic(interface{})和func recover() interface{}是Golang中用來錯誤處理的兩個函式。
panic的作用就是拋出錯誤訊息,從它的參數類型可以看到它可以拋出任意類型的錯誤訊息。 (建議學習:go)
在函數執行過程中的某處呼叫了panic,則立即拋出錯誤訊息,同時函數的正常執行流程終止,但是此函數中panic之前定義的defer語句將會依序執行。之後該goroutine立即停止執行。
recover()用於將panic的資訊捕捉。
recover必須定義在panic之前的defer語句中。在這種情況下,當panic被觸發時,goroutine不會簡單的終止,而是會執行在它之前定義的defer語句。
捕捉自己設定的panic錯誤:
package main import "fmt" import "math" func foo(a int) { defer fmt.Println("foo退出来了") defer func() { if r := recover(); r != nil { fmt.Printf("捕获到的错误:%s\n", r) } }() if a < 0 { panic("必须输入大于0的数") } fmt.Println("该数的方根为:", math.Sqrt(float64(a))) } func main() { var a int a = 10 fmt.Printf("a=%d\n", a) foo(a) var b int b = -10 fmt.Printf("b=%d\n", b) foo(b) fmt.Println("该goroutine还可以执行") } // /////////// a=10 该数的方根为: 3.1622776601683795 foo退出来了 b=-10 捕获到的错误:必须输入大于0的数 foo退出来了 该goroutine还可以执行 Process finished with exit code 0
以上是golang如何捕捉錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!