我有一段代码,我们运行多个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()何时返回错误并增加我的计数,但是我也想在常规退出时增加我的计数,因为我没有想到的一些恐慌或错误,什么是傻瓜证明的方式跟踪有多少常规死亡?
答案 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")
}
}