golang 开发过程中的坑

本文探讨了Go语言中channel的正确使用方法,包括如何处理已关闭channel的读写操作及channel变量间的比较等问题。

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

1. chan数据读取写入

 正常情况下chan读取写入都没有问题,但是如果chan关闭之后会出现问题

 所以读取chan数据的时候需要增加chan是否关闭的判断

c := make(chan int, 1)
v, ok := <- c
 if ok {
  ....
} 

 

向一个已经关闭的chan写入数据,程序直接会panic

 

2. chan变量之间的对比

 由于chan的实现机制,chan其实内部实现就是一个指针, chan默认都是走引用的方式。 

c1 := make(chan int, 1)
c2 := c1

以上代码可以说明:

c1 和 c2 指向的内容是相同的(指针指向的内容),但是&c1 != &c2 ; c1和c2各自独立占用4字节的内存,他们指向内容是相同的

如果需要判断c1是否等于c2直接使用如下方式判断:

if c1 == c2 {

}

 

转载于:https://www.cnblogs.com/davygeek/p/6431889.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值