package main import( "fmt" "errors" ) func main() { num := 10 fmt.Printf("num的類型%T, num的值%v, num的地址%v\n", num, num, &num) num2 := new(int) //返回一個指針 //num2的類型*int, num2的值0xc04200e0b8, num2的地址0xc042004030, num2指向的值0 fmt.Printf("num2的類型%T, num2的值%v, num2的地址%v, num2指向的值%v\n", num2, num2, &num2, *num2) //捕獲異常 testCatch() fmt.Println("我還會執行") //自定義錯誤 panic testPanic() fmt.Println("我是panic後續代碼"); } func testCatch() { //使用defaer+recover捕獲異常 defer func(){ err := recover() //一個內置函數,能捕獲異常 if nil != err { fmt.Println("err=", err) } }() n1 := 10 n2 := 0 n3 := n1 / n2 //發生異常 fmt.Println("catch.....", n3); } func readConf(name string) (err error) { if "config.ini" == name { return nil } else { return errors.New("發生錯誤") } } func testPanic() { err := readConf("config2.ini") if nil != err { panic(err) //若是有錯誤,這裏拋出錯誤且終止後續程序的執行 } fmt.Println("I am ok 繼續執行") }