Отсутствие возврата в конце функции - PullRequest
0 голосов
/ 07 января 2019

У меня есть функция 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)

Исходное видео, на которое я ссылался, не имело таких проблем. Я использую Ubuntu с версией Go go1.11.4 linux/amd64. Я использую редактор Atom с установленным пакетом инструментов go-lang.

EDIT Решение состоит в том, что мне нужно 3 параметра для возврата return conn,ch,&q решил мою проблему.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Ваша функция объявляет 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
}

Если вы видели видео с этим объявлением функции и без оператора возврата, этот код также недействителен. Это не зависит от версии Go или ОС.

0 голосов
/ 07 января 2019

часть вашего кода (* amqp.Connection, * amqp.Channel, * amqp.Queue) говорит, что ваша функция возвращает 3 вещи, но вы ничего не возвращаете, поэтому вы получаете ошибку. Попробуйте добавить

return conn, ch, q

к вашему коду, который должен решить проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...