1-make chan破的条件是什么?deliveries <-chan amqp.Deliveryfor d:= range deliveries{ ..}如果大约几分钟 chan 交付中没有更多数据,它将中断。上面的代码和下面的一样吗?deliveries <- chan amqp.Deliveryfor{ d,ok:=<-deliveries if !ok{ break } //code}2-为什么chan不仅返回数据还返回状态?“ok”是什么意思?3-chan是怎么实现的?“ok”是client的状态,为什么会返回“ok”?
2 回答
烙印99
TA贡献1829条经验 获得超13个赞
我将首先回答问题 2 和 3,因为答案为我对问题 1 的回答提供了上下文。
2, 3) 内置函数close(c)记录不再有值被发送到通道 c。
接收表达式中的第二个结果是一个布尔值,指示操作是否成功。如果接收到发送的值,则第二个结果为真,如果由于通道关闭而接收到零值,则为假。
1) 通道上的范围接收通道上发送的值,直到通道关闭。
以下循环非常相似。它们都接收值,直到通道关闭。
for v := range c {
// code
}
for {
v, ok := <-c
if != ok {
break
}
// code
}
这些循环之间的主要区别在于变量的范围v。的范围v在第一个循环之外和第二个循环内。如果您在循环中使用闭包和 goroutine,这种区别很重要。
慕姐4208626
TA贡献1852条经验 获得超7个赞
1) 代码 1 和 2 不同:第二个也获取ok
指示通道是否被发送方关闭的信息。这使您的代码更加健壮。
2) 通道只能传输一种类型的消息。如果您需要状态代码,则必须将其放入消息中。
- 2 回答
- 0 关注
- 215 浏览
添加回答
举报
0/150
提交
取消