golang的错误捕获之panic/defer的使用

2023-06-01 00:00:00 错误 捕获 Golang

golang的错误捕获

使用panic和defer联合使用可以很棒的捕获错误信息并进行自己想要的处理


recover :

只能捕获函数本身的错误信息,不能跨函数进行捕获错误信息

panic :

的错误进行捕获并处理不会导致主函数的终止,否则会导致主函数的错误退出


示例代码:


package main
import (
    "fmt"
    "os"
    "os/signal"
    "time"
)
var err interface{}
func main() {
    defer func() {
        if err=recover();err != nil {
            fmt.Println("main ==》 ",err)
        }
    }()
    interrupt := make(chan os.Signal)
    signal.Notify(interrupt, os.Interrupt)
    var i int = 0
    for {
        i++
        select {
        case <-time.After(time.Second):
            // 调用方法
            go test(i)
        case <-interrupt:
            panic("终止")
            return
        }
    }
}
func test(i int) {
    defer func() {
        if err = recover(); err != nil {
            fmt.Println("test==>", err)
        }
    }()
    if i == 10 || i == 20 {
        panic("终止test")
    }
    fmt.Println("结果==》 ",i)
}


相关文章