Golang入门学习(五):异常处理_Golang



2.5 错误处理机制

2.5.1 基本说明

  • Go语言追求简洁优雅,因此并不支持传统的try…catch…finally这种处理方式
  • Go中引入的处理方式包括: defer, panic, recover
  • 使用场景如下: 在Go程序中跑出一个异常panic, 然后在defer中通过recover捕获到这个异常然后处理之
  • 加入异常处理机制,即使程序发生错误,主程序依然可以继续运行

2.5.2 入门示例

func test() {
	num1 := 10
	num2 := 0

	ret := num1 / num2 //panic: runtime error: integer divide by zero
	fmt.Println(ret)
}

func testPanic() {
	//使用defer+recover机制来处理异常
	defer func() {
		err := recover() //recover函数用于捕获异常
		if err != nil {  //说明真的有异常发生
			fmt.Println("err=", err)
		}
	}() //匿名函数
	num1 := 10
	num2 := 0

	ret := num1 / num2 //panic: runtime error: integer divide by zero
	fmt.Println(ret)
}

func main() {
	testPanic()

	fmt.Println("testPanic()执行完毕~~~")
}

2.5.3 自定义错误

  • Go程序中支持自定义错误,使用errors.New和panic内置函数
  • errors.New(“xxx”) 用来生成一个自定义错误,返回值是一个错误码
  • panic内置函数用来接收一个interface{}类型的值作为参数,因此可以接受自定义的错误类型。提示错误信息并退出程序
//自定义错误类型

func readConf(name string) (err error) {
	if name != "ipsec.conf" {
		return errors.New("输入的文件名称有误!")
	}
	return nil
}

func test2() {
	if err := readConf("ipsecX.conf"); err != nil {
		panic(err)
	}
	fmt.Println("后续代码继续执行~~~")
}

func main() {
	test2()
}