我複製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