三种方式吧:1、如果你的程序没有捕获 panic,那么只要有一个 goroutine 出现了 panic 整个进程都会退出。2、在 goroutine 的 defer 方法中来捕获当前协程的 panic ,如果捕获成功,调用 os.Exit(1) 来退出。3、启动协程时传递一个context,同时在defer 中使用 recover 捕获 panic ,如果成功,直接调用 cancel方法通知所有协程退出,这种方法不会使进程崩溃。
func main(){ for i := 0 ; i < 100 ; i ++ { go func(j int){ if j == 99 { panic('exit all go routines') } }(i) } time.Sleep(1*time.Second) } 只要 goroutine 内有panic,并且这个panic没有被recover捕获,程序会直接崩溃退出。
三种方式吧:
1、如果你的程序没有捕获
panic
,那么只要有一个 goroutine 出现了panic
整个进程都会退出。2、在 goroutine 的 defer 方法中来捕获当前协程的 panic ,如果捕获成功,调用
os.Exit(1)
来退出。3、启动协程时传递一个
context
,同时在defer 中使用recover
捕获panic
,如果成功,直接调用cancel
方法通知所有协程退出,这种方法不会使进程崩溃。