go的channel的使用

本文探讨了在Go语言中使用通道实现并发计数器的功能,并分析了不同调用方式下输出结果的差异,揭示了Go语言通道的并发特性及其在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

func Count(ch chan int) {
	counter++
	ch <- counter
	fmt.Println("Counting")
}

func main() {
	chs := make([]chan int, 10)
	for i := 0; i < 10; i++ {
		chs[i] = make(chan int)
		go Count(chs[i])
	}
	for index, ch := range chs {
		fmt.Println(index, "", <-ch)
	}
}

输出一致结果:
Counting
	0  1
	1  10
	2  10
	3  10
	4  10
	5  10
	6  10
	7  10
	8  10
	9  10

猜测是range方法读取channel (chs)时候先读取第一个,然后再读取剩余全部,如果剩余管道缓冲数据没有填满N,则阻塞

另外一个种方案:

func Count(ch chan int) {
	ch <- counter
	counter++
	fmt.Println("Counting")
}
输出一致结果:
Counting
	0  0
	1  1
	2  1
	3  1
	4  1
	5  1
	6  1
	7  1
	8  1
	9  1


转载于:https://my.oschina.net/yang1992/blog/481533

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值