美文网首页
05-内建方法-panic/recover

05-内建方法-panic/recover

作者: 玄德公笔记 | 来源:发表于2021-11-20 20:57 被阅读0次

1. panic

单独使用panic,发现错误后程序退出

1.1 代码

package main

func main () {
    println("北伐曹魏")
    receivePanic()
    println("恢复汉室")
}

func receivePanic(){
    panic("武侯挂了")
}

1.2 结果

image.png

一个悲伤的故事,panic 武侯挂了。所以没有打印出“恢复汉室”

2. recover连用

捕捉错误,使程序继续运行

2.1 代码

package main

import "fmt"

func main () {
    fmt.Println("北伐曹魏")
    receivePanic()
    fmt.Println("恢复汉室")
}

func receivePanic(){
    defer func() {
        message := recover()
        fmt.Println("失败原因:",message)
    }()
    panic("武侯挂了")
}

2.2 结果

image.png

3. 规范写法

package main

import "fmt"

func main () {
    fmt.Println("北伐曹魏")
    receivePanic()
    fmt.Println("恢复汉室")
}

func receivePanic(){
    defer coverPanic()
    panic("武侯挂了")
}

func coverPanic(){
    message := recover()
    fmt.Println("失败原因:",message)
}

4. 继续改造

  • 用switch语句按类型给panic 信息分类
  • panic给一个error信息(之前类型一直是string)

4.1 代码

package main

import (
    "errors"
    "fmt"
)

func main () {
    fmt.Println("北伐曹魏")
    receivePanic()
    fmt.Println("恢复汉室")
}

func receivePanic(){
    defer coverPanic()
    panic(errors.New("武侯挂了"))
}

func coverPanic(){
    message := recover()
    switch message.(type) {
    case string:
        fmt.Println("string message: ",message)
    case error:
        fmt.Println("error message: ",message)
    default:
        fmt.Println("unknow panic")
    }
}

4.2 结果

image.png

相关文章

网友评论

      本文标题:05-内建方法-panic/recover

      本文链接:https://www.haomeiwen.com/subject/hvshtrtx.html