前言:
在Go语言中,如果我们go一个协程,但这个协程出现了panic,我们没有捕获这个协程,就会造成程序的崩溃,也就是整个程序终止;但是如果这时可以在goroutine中使用recover来捕获panic,进行处理,这样主协程以及其他协程不会受到影响。
代码:
package main
import (
"fmt"
"time"
)
func printer() {
for i := 0; i < 10; i++ {
time.Sleep(time.Second)
fmt.Println("hello world")
}
//定义一个map的错误用法导致error
var myMap map[int]string
myMap[0] = "go"
}
func test() {
defer func() {
if err := recover();err!=nil{
fmt.Println("test发生错误",err)
}
}()
}
func main() {
go printer()
go test()
for i := 0; i < 10; i++ {
fmt.Println("main() ok=",i)
time.Sleep(time.Second)
}
}
如图所示: