gpt4 book ai didi

for-loop - Golang 中的事件驱动模型

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:33 26 4
gpt4 key购买 nike

我正在阅读 RabbitMQ tutorial并看到以下代码:

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。这个for循环是如何处理事件的?例如。在应用程序启动时,msgs 队列缓冲区中只有一条消息。

问题:

  1. 它将如何处理下一个事件?
  2. 经过一些playing around使用这段代码,我发现它可能会停留在 log.Printf 行,并且不再处理事件。可能是什么原因?

最佳答案

  1. How would it process next event?

除了对基本数据结构的迭代,range在 GoLang 中,也可以迭代从 channel 接收的值。 Range 在从队列接收到每个元素时对其进行迭代,并且仅在 channel 关闭时结束。下一次迭代将在 channel (msgs) 收到一个值时发生

msgs <- message
  1. After some playing around with this code I found that it could stuck on log.Printf line and wouldn't process events anymore. What can be a reason?

考虑到有一个 blocking channel forever 并且我们有一个遍历 msgs channel 的范围,预计有 2 种可能的操作:

要么

  1. 通过消息 channel 发送消息

    消息 <- 消息

  1. 将值发送到forever 以便它解锁进程

    永远<-假

看起来该解决方案旨在通过 channel 等待和异步处理消息。

关于for-loop - Golang 中的事件驱动模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47484693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com