函数末尾缺少返回

时间:2019-01-07 08:31:56

标签: go rabbitmq

我有一个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解决了我的问题。

2 个答案:

答案 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。