程序报错时候会使得程序中断,尤其是使用协程运行时。如果一个协程报错时,不希望程序中断影响其他的协程,就可以使用defer和recover()组合输出错误信息防止报错中断
package main
import (
"fmt"
"time"
)
func sayHello() {
for i := 0; i < 4; i++ {
time.Sleep(time.Second)
fmt.Println("helloworld")
}
}
func test() {
defer func() { //defer最后运行
if err := recover(); err != nil {
fmt.Printf("程序报错了,错误信息为=%s\n", err)
}
}()
var myMap map[int]string //需要make才能初始化,这里报错
myMap[0] = "北京"
}
func main() {
go sayHello()
go test()
for i := 0; i < 4; i++ {
time.Sleep(time.Second)
fmt.Println("这是主线程")
}
}