go语言中的异常处理的关键字为defer,panic和recover,类比于其他语言的try,catch和finally,但go语言中的使用方法有些不同
下面是我的练习代码:
// GoStudy0215 project main.go /* go语言学习——异常 */ package main import ( "fmt" ) func main() { defer func() { //defer执行后,结束该函数的时候会调用 if r := recover(); r != nil { //捕获错误信息,以进行相应的错误处理 fmt.Println(r) //错误处理 } }() //这里加括号表示调用这个函数 defer func() { //defer是一个栈,后定义的defer会先执行 fmt.Println("func end !!!") }() testFunc1() //这里调用panic之后,后面的不会执行,开始执行终止程序 testFunc2() defer func() { //这个defer没有执行到,所以main函数结束的时候,并不会调用这个defer fmt.Println("no print") }() } func testFunc1() { fmt.Println("test func start") //由于某种原因,出现了错误 //比如,游戏中的人物因为这个函数移动到了场景外 //执行下面的语句,终止这个函数,层层往上终止,直至终止这个线程 panic("404") fmt.Println("test func end") } func testFunc2() { panic(555) }
通过我上面的代码能够看出来,相比于try,catch,finally好的地方在于,我们可以把应该正常执行的代码,和错误处理的代码完全分离,而不用向原来那样将正常的代码,错误处理的代码写在一起,使代码层次混乱
以上,异常结束