golang panic 的使用

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)
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!