前言:
在实际开发当中,我们有时候不好确定什么时候要关闭管道,也就不能随便的close
掉,那么我们就是可以使用select
完美解决
案例:
我们创建两个可以发生死锁的管道,然后通过 select - return
关掉它
package main
import "fmt"
func main() {
intChan := make(chan int, 10)
for i := 0; i < 10; i ++ {
intChan<- 1
}
strChan := make(chan string, 5)
for i :=0; i < 5; i ++ {
strChan<- "hello" + fmt.Sprintf("%d", i)
}
for {
select {
case v := <-intChan :
fmt.Printf("从intChan读取的数据%d\n", v)
case v := <-strChan :
fmt.Printf("从strChan读取的数据%d\n", v)
default:
fmt.Printf("取不到数据了,我要退出,俺可不想阻塞在这里\n")
return
}
}
}
结果:
从strChan读取的数据%!d(string=hello0)
从intChan读取的数据1
从intChan读取的数据1
从intChan读取的数据1
从intChan读取的数据1
从strChan读取的数据%!d(string=hello1)
从strChan读取的数据%!d(string=hello2)
从intChan读取的数据1
从strChan读取的数据%!d(string=hello3)
从strChan读取的数据%!d(string=hello4)
从intChan读取的数据1
从intChan读取的数据1
从intChan读取的数据1
从intChan读取的数据1
从intChan读取的数据1
取不到数据了,我要退出,俺可不想阻塞在这里
Process finished with exit code 0
我会两种语言,一种写给程序执行,一种说给你听.
来自LiuYoung的个人博客
如果文章对你有帮组的话,记得留个赞哦 |