我有一个getQueue()
函数,用于为Go客户端创建与RabbitMQ实例的连接和通道。我具有上述功能的代码:
func getQueue() (*amqp.Connection, *amqp.Channel, *amqp.Queue) {
conn, err := amqp.Dial("amqp://ayman@localhost:5672")
fallOnError(err, "Fail to connect")
ch, err := conn.Channel()
fallOnError(err, "Fail to open channel")
q, err := ch.QueueDeclare("hello",
false, //durable
false, //autoDelete
false, //exclusive
false, //noWait
nil) //args
fallOnError(err, "Fail to delare a queue")
}
我同样收到此错误Missing return at end of function
。
我尝试在函数末尾使用回车键盘,但随后出现此错误:
not enough arguments to return
have ()
want (*amqp.Connection, *amqp.Channel, *amqp.Queue)
我所指的源视频没有任何此类问题。
我正在使用Go版本go1.11.4 linux/amd64
的Ubuntu计算机。我正在使用安装了go-lang
工具包的Atom编辑器。
编辑
解决的办法是我需要3个参数才能返回
return conn,ch,&q
解决了我的问题。
答案 0 :(得分:1)
您的代码的(* amqp.Connection,* amqp.Channel,* amqp.Queue)部分表示您的函数返回了3件事,但是您没有返回任何东西,这就是为什么您会收到错误消息。尝试添加
return conn, ch, q
应该解决问题的代码
答案 1 :(得分:1)
您的函数声明了3种返回类型,但是您提供的代码没有return
语句。
您必须使用return
语句指定要返回的值(在所有可能的返回路径上),例如:
func getQueue() (*amqp.Connection, *amqp.Channel, *amqp.Queue) {
conn, err := amqp.Dial("amqp://ayman@localhost:5672")
fallOnError(err, "Fail to connect")
ch, err := conn.Channel()
fallOnError(err, "Fail to open channel")
q, err := ch.QueueDeclare("hello",
false, //durable
false, //autoDelete
false, //exclusive
false, //noWait
nil) //args
fallOnError(err, "Fail to delare a queue")
return conn, ch, q
}
或者您必须使用命名结果参数,然后可以有一个“裸” return
语句(但您仍然必须有一个return
),例如:
func getQueue() (conn *amqp.Connection, ch *amqp.Channel, q *amqp.Queue) {
conn, err = amqp.Dial("amqp://ayman@localhost:5672")
fallOnError(err, "Fail to connect")
ch, err = conn.Channel()
fallOnError(err, "Fail to open channel")
q, err = ch.QueueDeclare("hello",
false, //durable
false, //autoDelete
false, //exclusive
false, //noWait
nil) //args
fallOnError(err, "Fail to delare a queue")
return
}
如果您看到带有此函数声明且没有return语句的视频,则该代码也无效。这不依赖于Go版本或OS。