我复制rabbitmq go例子,并稍加改动以测试。未能阻止rabbitmq msg使用msg:= rang msgs(msgs是一个通道)
Example URL。它可以正常工作
代码的结构:
func main() {
//dial rabbit server
//declare channel/exange/queue
msgs, err := ch.Consume() //typeof(msgs)=<-chan Delivery
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
}
但是如果我把一些代码到一个函数,如:
func ListenRabbit() (<-chan Delivery, error) {
//dial rabbit server
//declare channel/exange/queue
msgs, err := ch.Consume() //typeof(msgs)=<-chan Delivery
return msgs, err
}
func main(){
msgs, _ := ListenRabbit()
for d := range msgs {
log.Printf("Received a message: %s", d.Body)
}
}
在main()不能阻止从服务器等待味精。它现在将退出。原始代码和改变代码之间是否有区别? 非常感谢!
谢谢。我忘了“推迟”操作...并感谢您对设计的评论:) –
不用担心,只是不要初始化连接和通道然后处置它,将它返回到方法 – dmportella