运行transfer的main文件出错.
来源:9-8 编码实战: 异步转移文件测试+小结

阿斯顿_马丁
2019-04-14
老师好,
按照您视频中,在producer.go中,没有如下代码(仓库中有的)
// 如果异常关闭,会接收通知
var notifyClose chan *amqp.Error
//func init() {
// // 是否开启异步转移功能,开启时才初始化rabbitMQ连接
// if !config.AsyncTransferEnable {
// return
// }
// if initChannel() {
// channel.NotifyClose(notifyClose)
// }
// // 断线自动重连
// go func() {
// for {
// select {
// case msg := <-notifyClose:
// conn = nil
// channel = nil
// log.Printf("onNotifyChannelClosed: %+v\n", msg)
// initChannel()
// }
// }
// }()
//}
但是如果我把这段代码注释掉,我运行main文件会出现如下错误:
加上这段代码,就运行正常(仓库中的代码同样)。请问为什么呢?
$ go run main.go
2019/04/14 14:29:54 开始监听转移任务队列
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x48 pc=0x5ad7e6]
goroutine 1 [running]:
github.com/streadway/amqp.(*Channel).Consume(0x0, 0x70c871, 0x16, 0x707b39, 0xc, 0x1, 0x0, 0xbf24d2
b8a08577ec, 0x1f, 0xc0000825c0)
C:/GoExercise/src/github.com/streadway/amqp/channel.go:1075 +0x166
filestore_server/mq.StartConsume(0x70c871, 0x16, 0x707b39, 0xc, 0x71d5c0)
C:/GoExercise/src/filestore_server/mq/consumer.go:13 +0x8b
main.main()
C:/GoExercise/src/filestore_server/service/transfer/main.go:48 +0xa2
exit status 2
写回答
1回答
-
同学你好,多谢指出, 这个问题的原因是rabbitMQ的连接没有初始化。抱歉是视频里漏了init()方法的演示,
最重要的步骤是:
func init() { // ... initChannel() // ... }
通过内建的init方法,程序会在启动的时候调用initChannel()函数来初始化连接。
可以把我以上的代码拷过去尝试执行一下呢;仓库里init()方法里的剩下其他步骤主要是用于断线自动重连的。
022021-04-17
相似问题