1 - 让陈破坏的条件是什么?
deliveries <-chan amqp.Delivery
for d:= range deliveries{
..
}
如果几分钟内没有更多的数据传递,它就会中断。 代码是否与下面相同?
deliveries <- chan amqp.Delivery
for{
d,ok:=<-deliveries
if !ok{
break
}
//code
}
2 - 为什么陈不仅会返回数据而且还会返回状态?“ok”是什么意思?
3 - chan如何实现?“ok”是关于客户端的状态,为什么它会返回“ok”?
答案 0 :(得分:0)
1)代码1和2不同:第二个也提取ok
,表示发送方是否关闭了该频道。这使您的代码更加健壮。
2)频道只能传输一种类型的消息。如果您需要状态代码,请将其放在消息中。
答案 1 :(得分:0)
我将首先回答问题2和3,因为答案为我对问题1的回答提供了背景。
2,3)内置函数close(c)记录不再有值发送到通道c。
receive表达式中的第二个结果是bool,指示操作是否成功。如果收到发送的值,则第二个结果为true;如果因为通道已关闭而收到零值,则返回false。
1)通道上的范围接收通道上发送的值,直到通道关闭。
以下循环非常相似。它们都会在通道关闭之前接收值。
for v := range c {
// code
}
for {
v, ok := <-c
if != ok {
break
}
// code
}
这些循环之间的主要区别在于变量v
的范围。 v
的范围在第一个循环之外,在第二个循环之内。如果你use a closure and goroutine in the loop,这种区别很重要。