【问题标题】:How to avoid affecting other code when panic error or something else in golanggolang中出现panic错误或其他问题时如何避免影响其他代码
【发布时间】:2018-01-30 18:06:31
【问题描述】:
我正在编写一个将合并到公司系统中的监控程序。程序运行时,很少会出现一些错误,因为一些其他的服务器没有获取http规则,网络错误或其他各种问题。我修复了大部分但我仍然害怕影响在主程序上可能存在潜在错误。
从公司方面来说,主程序的稳定性最重要,其次是监控的结果,监控的稳定性是次要的。
有没有方法可以隔离错误?例如python中的“try...except Exception...”忽略错误(诚然,不推荐)如何避免在golang中出现panic错误或其他内容时影响其他代码
【问题讨论】:
标签:
exception
go
runtime-error
panic
【解决方案1】:
有了恐慌,你可以像这样使用recover
func recoverExample() {
defer func() {
if panicMessage := recover(); panicMessage != nil {
fmt.Printf("Panic '%v' captured", panicMessage)
}
}()
panic("Oh no!")
}
有输出:
Panic 'Oh no!' captured
【解决方案2】:
用户恢复功能位于您有可能出错的功能顶部。不要使用panic,因为它会停止你的代码的执行。使用下面的代码 sn-p。它还会打印日志,让您知道异常发生在哪个函数中。
defer func() {
if r := recover(); r != nil {
log.Println("Recovered in custom function", r)
}
}()