GO錯誤的一些處理(defer,recover,panic)

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 繼續執行")
}
相關文章
相關標籤/搜索