Golang | 在不关闭管道的情况下,防止阻塞的解决办法

文章导航目录

前言:

在实际开发当中,我们有时候不好确定什么时候要关闭管道,也就不能随便的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的个人博客

Smile
如果文章对你有帮组的话,记得留个赞哦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值