大家好,欢迎来到IT知识分享网。
基本概念
painc宕机代码,发生宕机后后续代码全部都不执行了,一层一层向上抛异常
func Test1() {
fmt.Println("执行test1") } func TestPanic() {
panic("宕机了") } func Test2() {
fmt.Println("执行test2") } func main() {
Test1() TestPanic() Test2() }
输出
执行test1 panic: 宕机了 goroutine 1 [running]: main.TestPanic(...) E:/workspace/go/study/main.go:10 main.main() E:/workspace/go/study/main.go:19 +0x65
defer 代码 延迟自动执行代码,使用了defer关键字的会在所有正常代码执行完成后先入后出执行。
func Test(int uint8) {
fmt.Println(int) } func TestPanic() {
panic("宕机了") } func main() {
defer Test(1) defer Test(2) fmt.Println("输出") Test(3) //TestPanic() Test(4) defer Test(5) }
输出
输出 3 4 5 2 1
func Test(int uint8) {
fmt.Println(int) } func TestPanic() {
panic("宕机了") } func TestRecover() {
defer func() {
//捕获panic,并恢复程序使其继续运行 if err := recover(); err != nil {
fmt.Println("recover") } }() TestPanic() //主动抛出异常 } func main() {
Test(1) // 这里正常执行 TestRecover() // 这里宕机并且恢复让程序正常执行 Test(2) // 程序恢复正常执行 }
输出
1 recover 2
使用场景
- 程序遇到了无法正常执行下去的错误,主动调用panic函数结束程序运行
- 在调试程序中主动调用panic实现快速退出,然后打印堆栈信息快速的定位错误位置
Go语言中有两种处理错误的方式,一种是使用panic和recover的抛出捕获机制,另一种时使用error错误类型(后边会介绍)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114667.html