golang rabbitmq通道.SIGSEGV
各位, 我正在尝试为rabbitmq实现编写包装器库。出于某种奇怪的原因,我无法从现有队列中消费golang rabbitmq通道.SIGSEGV,go,rabbitmq,Go,Rabbitmq,各位, 我正在尝试为rabbitmq实现编写包装器库。出于某种奇怪的原因,我无法从现有队列中消费 msgs,err:=w.AMQP.Channel.Consume(导致: 2019-10-14T13:58:56.462-0400 info worker/worker.go:27 [Initializing NewWorker] 2019-10-14T13:58:56.462-0400 debug worker/worker.go:43 Starting Wo
msgs,err:=w.AMQP.Channel.Consume(
导致:
2019-10-14T13:58:56.462-0400 info worker/worker.go:27 [Initializing NewWorker]
2019-10-14T13:58:56.462-0400 debug worker/worker.go:43 Starting Worker
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x14d024e]
我遵循的方法很简单,rabbitmq驱动程序的接口也很简单。我不明白为什么我会遇到无效内存地址
错误
我的实现与本文的布局相同,以下是我所有的代码供参考:
// StartConsumingTlcFHVDrivers subscribes to queue and starts to do it's job
func (w *Worker) StartConsuming() {
queueName := w.options.Rabbit.AMQP.QueueName
w.logger.Debugf("Starting %s Worker", queueName)
msgs, err := w.AMQP.Channel.Consume(
queueName,
"",
false,
false,
false,
false,
nil,
)
if err != nil {
logger.Fatalf("Could not register consumer, err:%s", err)
}
forever := make(chan bool)
go func() {
for d := range msgs {
w.logger.Infof("Received a message: %s", d.Body)
}
}()
w.logger.Infof("Waiting for messages on %s", queueName)
<-forever
}
这个错误现在对我来说很明显。在构造函数中,不要关闭连接/通道
conn, err := amqp.Dial(options.AMQPConnectionURL)
if err != nil {
logger.Fatalf("%s: %s", "Can't connect to AMQP", err)
}
而不是
conn, err := amqp.Dial(options.AMQPConnectionURL)
if err != nil {
logger.Fatalf("%s: %s", "Can't connect to AMQP", err)
}
defer conn.Close()
```
哪一行触发了你的零解引用?@Adrian我已经更新了我的问题,thx!@Adrian投票失败的原因是什么?
conn, err := amqp.Dial(options.AMQPConnectionURL)
if err != nil {
logger.Fatalf("%s: %s", "Can't connect to AMQP", err)
}
defer conn.Close()
```