go程序在运行过程中发生panic,会导致程序崩溃,我们可以通过recover来捕获panic,并进行异常处理。
panic会导致程序崩溃:
func main(){
panic("process error")
}
goroutine里面的panic也会使程序崩溃:
func main(){
go func(){
panic("goroutine panic")
}
time.Sleep(1*time.Second)
fmt.Println("ok")
}
在goroutine里使用defer+recover 进行异常处理,可以保证goroutine发生panic,不会对主进程产生影响:
func main(){
go func(){
defer func(){
if err:=recover();err!=nil{
// 打印出err信息
fmt.Println(err.Error())
// 也可以继续panic
//panic(err.Error)
}
}
panic("goroutine error")
}
// goroutine发生panic,只会使协程中断,但是不影响主进程,主进程还可以正常运行。
for{
time.Sleep(1*time.Second)
fmt.Println("ok")
}
}