请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好 我看您的视频中讲Simple 消费者的时候有如下代码

forever := make(chan bool)
	//启用协程处理消息
	go func() {
		for d := range msgs {
			//消息逻辑处理,可以自行设计逻辑
			log.Printf("接收到队列消息: %s\n", d.Body)
		}
	}()
	log.Printf(" [*] 等待接收消息")
	<-forever

没太明白这里为什么要make 一个chann 呢 这里 chann 的作用是什么

正在回答 回答被采纳积分+3

2回答

可以去掉这部分. 下边写一个time.Sleep(time.Second * 10)也行. 但是10秒后这段代码就结束了. 

make一个channel可以造成等待, go fun(){}()那部分代码就可以永远在执行.

或者直接去掉forever和开的goroutine把处理的部分重新包装. 然后在for循环里重新开一个goroutine来执行貌似也可以.

for := range msgs {
    //实现要处理的逻辑函数
    go  process(d)
}
        
//自定义处理消息的逻辑函数
func process(msg amqp.Delivery) {
    log.Printf("Receive a message: %s", msg.Body) //使用log可以goroutine安全
}


0 回复 有任何疑惑可以回复我~
877286291 2020-08-23 09:57:48

一直等待消息,可以看下golang基础课对channel的讲解

0 回复 有任何疑惑可以回复我~
  • 提问者 secrethaha #1
    生产者也没用这个channel 啊  消费者等待 有什么用
    回复 有任何疑惑可以回复我~ 2020-08-23 16:23:00
  • Cap 回复 提问者 secrethaha #2
    是分开的
    回复 有任何疑惑可以回复我~ 2020-08-28 10:07:02
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信