管道的注意事项和细节3

package main

import (
“time”
“fmt”
)

//3)使用select可以解决从管道取数据得阻塞问题[案例演示]
//4)goroutine中使用recover,解决协程中出现panic,导致程序崩溃问题[案例演示]

/*
说明:如果我们起了一个协程,但是这个协亨出现了panic,如果我们没有捕获这个panic,就会造成整个程序崩溃,这时我们可以再goroutine中使用recover来捕获panic,进行处理,这样即使这个协程发生得问题,但是主线程仍然不受影响,可以继续前行。
*/
//函数
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!=nil{
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)
}

}

你可能感兴趣的:(管道的注意事项3)