Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 无法在返回参数中将msgs(type_Go_Types_Channel - Fatal编程技术网

Go 无法在返回参数中将msgs(type

Go 无法在返回参数中将msgs(type,go,types,channel,Go,Types,Channel,有以下代码: func consumeQueue(ch *amqp.Channel, q_Name string) (chan amqp.Delivery) { msgs, err := ch.Consume( q_Name, // queue "", // consumer true, // auto-ack false, // exclusive false, // no-local

有以下代码:

func consumeQueue(ch *amqp.Channel, q_Name string) (chan amqp.Delivery) {
    msgs, err := ch.Consume(
        q_Name, // queue
        "",     // consumer
        true,   // auto-ack
        false,  // exclusive
        false,  // no-local
        false,  // no-wait
        nil,    // args
    )
    failOnError(err, "Failed to register a consumer")   
    return msgs
}
它引发以下编译时异常:

cannot use msgs (type <-chan amqp.Delivery) as type chan amqp.Delivery in return argument

怎么了?

很简单。您试图返回一个定向通道,在本例中是一个只读通道,作为一个通用通道,可用于读写

这里有一些关于频道方向的基本信息

Tl;博士 任何信道都可用作定向信道。这提高了总体类型安全性,并使代码更容易为他人理解/使用:

func Foo() <-chan struct{} {
}

正如您所注意到的:当您尝试将定向通道转换为双向通道时,编译器会对您大喊大叫。当您尝试将读通道转换为写为chan的写通道时,也会遇到类似的错误。这非常简单。您试图返回一个定向通道,在本例中是一个只读通道,作为一个通用通道,可用于读写

这里有一些关于频道方向的基本信息

Tl;博士 任何信道都可用作定向信道。这提高了总体类型安全性,并使代码更容易为他人理解/使用:

func Foo() <-chan struct{} {
}
正如您所注意到的:当您尝试将定向通道转换为双向通道时,编译器会对您大喊大叫。当您尝试将读通道转换为写为chan的写通道时,也会遇到类似的错误