如果在golang中出现恐慌错误或其他原因时如何避免影响其他代码

时间:2018-01-30 04:22:21

标签: exception go runtime-error panic

我正在编写一个监控程序,它将合并到公司的系统中。当程序运行时,很少发生一些错误,因为诸如其他一些服务器之类的各种问题都没有获得http,网络错误或其他任何问题的规则。我修复了大部分错误但我仍然害怕可能存在潜在错误对主程序的影响。

从公司的角度来看,主程序的稳定性是最重要的,其次,监控的结果,监控的稳定性是低优先级的。

有没有方法可以隔离错误?例如,"尝试...除了例外..."在python中忽略错误(不可否认,不推荐)如果在golang中出现恐慌错误或其他原因时如何避免影响其他代码

2 个答案:

答案 0 :(得分:3)

对于恐慌,您可以像这样使用recover

func recoverExample() {
    defer func() {
        if panicMessage := recover(); panicMessage != nil {
            fmt.Printf("Panic '%v' captured", panicMessage)
        }
    }()
    panic("Oh no!")
}

输出:

Panic 'Oh no!' captured

答案 1 :(得分:1)

用户恢复函数位于函数顶部,您可能会在其中遇到错误。不要使用panic因为它会停止执行您的代码。使用下面的代码段。此外,它将打印日志,告知您发生异常的功能。

defer func() {
    if r := recover(); r != nil {
        log.Println("Recovered in custom function", r)
    }
}()