如何记住死亡的常规程序?

时间:2018-03-13 20:43:12

标签: go

我有一段代码,我们运行多个go例程来接收值。我试图计算由于某些异常或错误导致的例程已经死亡的数量。我不想更新正常执行的计数。

  for {
    go func(){
       err := receiveValues()

    }()
  }

这里,receiveValues会调用其他函数,如果失败则返回错误

func recieveValues() error{
  if err, val := callSomeFunc(); err != nil{
    return err
  }

  if err2, val2 := callOtherFunc(val); err2 != nil{
    return err2
  }
}

我可以检查receiveValues()何时返回错误并增加我的计数,但是我也想在常规退出时增加我的计数,因为我没有想到的一些恐慌或错误,什么是傻瓜证明的方式跟踪有多少常规死亡?

1 个答案:

答案 0 :(得分:0)

使用将从恐慌中恢复的延迟功能。

func count() {
    err := recover()
    if err != nil {
        // count error
    } else {
        // count no error
    }
}

func trap() {
    defer count()
    if rand.Intn(2) >= 1 {
        panic("bad luck")
    }
}