我正在阅读RabbitMQ教程,并看到以下代码:
forever := make(chan bool)
go func() {
for d := range msgs {
log.Printf("Received a message: %s", d.Body)
}
}()
log.Printf(" [*] Waiting for messages. To exit press CTRL+C")
<-forever我感兴趣的是for d := range msgs。这对于循环如何处理事件?例如:在应用程序启动时,msgs队列缓冲区中只有一条消息。
问题:
log.Printf行上,不再处理事件了。什么能成为理由?发布于 2017-11-25 11:01:18
除了对基本数据结构进行迭代,GoLang中的GoLang还可以迭代从一个通道接收到的值。范围遍历每个元素,因为它是从队列中接收到的,并且只有在通道关闭时才结束。下一次迭代将在通道(msgs)接收到一个值时进行。
msgs <- message考虑到有一个阻塞通道 forever,并且我们有一个在msgs信道上迭代的范围,有两个可能的操作是预期的:
任一
或
forever,使其解除对进程的阻塞
永远<-假该解决方案似乎是为、等待、和通过通道异步处理消息而设计的。
https://stackoverflow.com/questions/47484693
复制相似问题