阅读 85

Go 语言 Panic

Panic是一种我们用来处理错误情况的机制。紧急情况可用于中止函数执行。当一个函数调用panic时,它的执行停止,并且控制流程到相关的延迟函数。

这个函数的调用者也会被终止,调用者的延迟函数也会被执行(如果有的话)。这个过程一直持续到程序结束。现在报告错误情况。

这种终止序列称为panic,可以由内置函数recover控制。

panic示例1:

示例

package mainimport "os"func main() {	panic("Error Situation")
	_, err := os.Open("/tmp/file")	if err != nil {		panic(err)
	}
}

输出:

panic: Error Situation

goroutine 1 [running]:
main.main()
/Users/pro/GoglandProjects/Panic/panic example1.go:6 +0x39

panic示例2

示例

package mainimport "fmt"func main() {
	fmt.Println("Calling x from main.")
	x()
	fmt.Println("Returned from x.")
}func x() {	defer func() {		if r := recover(); r != nil {
			fmt.Println("Recovered in x", r)
		}
	}()
	fmt.Println("Executing x...")
	fmt.Println("Calling y.")
	y(0)
	fmt.Println("Returned normally from y.")
}func y(i int) {
	fmt.Println("Executing y....")	if i > 2 {
		fmt.Println("Panicking!")		panic(fmt.Sprintf("%v" , i))
	}	defer fmt.Println("Defer in y", i)
	fmt.Println("Printing in y", i)
	y(i + 1)
}

输出:

Calling x from main.Executing x...Calling y.Executing y....Printing in y 0Executing y....Printing in y 1Executing y....Printing in y 2Executing y....Panicking!Defer in y 2Defer in y 1Defer in y 0Recovered in x 3Returned from x.


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐