golang panic 的使用

Golang
545
0
0
2022-09-18

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

  1. recover 只能捕获函数本身的错误信息,不能跨函数进行捕获错误信息
  2. 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)
}