go语言的panic和recover函数用法实例
Golang有2个内置的函数panic()和recover(),用以报告和捕获运行时发生的程序错误,与error不同,panic-recover一般用在函数内部。一定要注意不要滥用panic-recover,可能会导致性能问题,我一般只在未知输入和不可靠请求时使用。
golang的错误处理流程:当一个函数在执行过程中出现了异常或遇到panic(),正常语句就会立即终止,然后执行defer语句,再报告异常信息,最后退出goroutine。如果在defer中使用了recover()函数,则会捕获错误信息,使该错误信息终止报告。
看代码:
packagemain import"fmt" funcmain(){ deferfunc(){ fmt.Println("c") //iferr:=recover();err!=nil{ //fmt.Println(err) //}else{ //fmt.Println("hehe") //} //iferr:=recover();err!=nil{ //fmt.Println(err) //}else{ //fmt.Println("haha") //} fmt.Println("d") }() f() deferfunc(){ fmt.Println("e") }() } funcf(){ fmt.Println("a") panic(10000) fmt.Println("b") fmt.Println("f") }
结果:
ubuntu@VM-0-15-ubuntu:~/taoge/go$goruntest.go
a
c
d
panic:10000
goroutine1[running]:
panic(0x4b8480,0xc82000a2c0)
/usr/lib/go-1.6/src/runtime/panic.go:481+0x3e6
main.f()
/home/ubuntu/taoge/go/test.go:34+0x115
main.main()
/home/ubuntu/taoge/go/test.go:25+0x35
exitstatus2
ubuntu@VM-0-15-ubuntu:~/taoge/go$
看代码:
packagemain import"fmt" funcmain(){ deferfunc(){ fmt.Println("c") iferr:=recover();err!=nil{ fmt.Println(err) }else{ fmt.Println("hehe") } iferr:=recover();err!=nil{ fmt.Println(err) }else{ fmt.Println("haha") } fmt.Println("d") }() f() deferfunc(){ fmt.Println("e") }() } funcf(){ fmt.Println("a") panic(10000) fmt.Println("b") fmt.Println("f") }
结果:
ubuntu@VM-0-15-ubuntu:~/taoge/go$goruntest.go
a
c
10000
haha
d
ubuntu@VM-0-15-ubuntu:~/taoge/go$
好好体会下。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接