开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:管道的注意事项和细节(3)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9764
管道的注意事项和细节(3)
说明:如果我们起了一个协程,但是这个协程出现了 panic,如果我们没有捕获这个panic,就会造成整个程序崩溃,这时我们可以在 goroutine 中使用 recover 来捕获panic,进行处理,这样即使这个协程发生的问题,但是主线程仍然不受影响,可以继续执行。
一、 goroutine 中使用 recover,解决协程中出现 panic,导致程序崩溃问题【案例演示】
如果在协程中出现 panic,那么整个程序就会崩溃。接下来进行举例。
新建一个文件,demo03,写一个文件 main.go。
Package main
Import (
“fmt”
“time”
)
//函数
Func sayhello(){
For I :=0; I < 10; i++{
//休眠一句输出一句
Time. Sleep(time.second)
Fmt.println(“hello world”)
}
}
//函数
Func test() {
//这里我们可以使用defer+ recover
Defer func(){
//捕获test抛出的panic
If err := recover();err ! = ni1{
Fmt.println(“test() 发生错误”,err)
}
}()
//定义了一个map
Var mymap map [int] string
Mymap[0] = “golang ”//error
}
Func main() {
Go sayhello
go test()
for I : = 0; I < 10; i++{
fmt.println(“main() ok=”, i)
Time. Sleep(time.second)
}
}
运行代码之后发现 panic,为此引进代码错误机制,进行捕获。