doter1995 2017-11-25 09:59
浏览 126
已采纳

Golang中的事件驱动模型

I am reading RabbitMQ tutorial and seeing following code:

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

What I am interested in is for d := range msgs. How does this for loop handle events? eg. At the app start I have only one message in msgs queue buffer.

Questions:

  1. How would it process next event?
  2. 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?
  • 写回答

1条回答 默认 最新

  • douzhuan0309 2017-11-25 11:01
    关注
    1. How would it process next event?

    Beside iteration over basic data structures, range in GoLang can also iterate over values received from a channel. Range iterates over each element as it's received from queue and ends only when the channel is closed. The next iteration will happen when the channel (msgs) will receive a value

    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?

    Considering that there is a blocking channel forever and we have a range that iterates over the msgs channel there are 2 possible actions that are expected:

    Either

    1. send message through the msgs channel

      msgs <- message

    or

    1. send value to forever so it unblocks the process

      forever <- false

    It seems like the solution is designed to wait and asynchronously process messages through a channel.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果