golang怎么处理异常

1053531172 · · 789 次点击
<a href="/user/Dust90" title="@Dust90">@Dust90</a> 可以给个demo看下吗?我发现在方法内有协程的情况下,在main无法捕获到异常
#2
更多评论
我是在main那边做了一个错误处理包装函数,可以处理任何的异常错误,而又不导致系统崩溃,感觉比java的异常处理方式好用多了。
#1
process.go ````golang package process // 声明处理接口 type Process interface { ProcessData(entrys []protocol.Entry) } // 声明处理函数 type DppProcess func(entrys []protocol.Entry) // DppProcess 实现处理接口 func (dpp DppProcess) ProcessData(entrys []protocol.Entry) { dpp(entrys) } type ErrorProcess func(entrys []protocol.Entry) error func (epp ErrorProcess) ProcessData(entrys []protocol.Entry) { epp(entrys) } // 声明数据处理函数 func ProcessFunc(entrys []protocol.Entry, process func(entrys []protocol.Entry)) { // 实例化一个 DppProcess dppProcess := DppProcess(process) processHandler(entrys, dppProcess) } // 声明数据处理函数 // 用于调用 Process 实现类的方法 func processHandler(entrys []protocol.Entry, process Process) { process.ProcessData(entrys) } // 声明全局处理错误函数 func ErrWrapper(errorProcess ErrorProcess) func([]protocol.Entry) { return func(entrys []protocol.Entry) { // panic defer func() { if r := recover(); r != nil { // 捕获的异常处理 util.Logger.File(&#34;panic-{Ymd}.log&#34;).Error(r) } }() // 进入处理函数 err := errorProcess(entrys) if err != nil { util.Logger.File(&#34;error-{Ymd}.log&#34;).Println(err) } } } ```` main.go ````golang package main ...... func main() { ...... go func() { process.ProcessFunc(message.Entries,process.ErrWrapper(service.EntryProcess)) }() ...... } ````
#3