隨著區塊鏈引發的“顛覆風暴”,大量區塊鏈培訓機構應運而生。但在魚龍混雜的培訓圈內,要想找到真正符合標準的課程體系與專屬區塊鏈領域的專業授課講師簡直是滄海一粟。兄弟連教育指出,是時候做出行動改變並顛覆傳統培訓機構運營思維,並提醒福士使用者,應理性選擇區塊鏈培訓機構。
func panic(interface{})和func recover() interface{}是Golang中用於錯誤處理的兩個函數。
panic的作用就是拋出一條錯誤資訊,從它的參數類型可以看到它可以拋出任意類型的錯誤資訊。在函數執行過程中的某處調用了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
----
-->捕捉go語言內部的Panic錯誤:
package main
import "fmt"
func foo() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("捕獲到的錯誤:%s\n", r)
}
}()
var a, b int
a, b = 1, 1
c := 3/(a-b)
fmt.Println(a, b, c)
}
func main() {
foo()
}
//====
捕獲到的錯誤:runtime error: integer divide by zero
"