golang rabbitmq通道.SIGSEGV

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

各位, 我正在尝试为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 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()
    ```