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的写通道时,也会遇到类似的错误