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 继续执行")
}
相关文章
相关标签/搜索