【发布时间】:2020-07-22 15:35:32
【问题描述】:
如果我有一个空的接口通道类型,我只是想监视事件,并想根据需要为其分配特定的通道,这在 Golang 中是否可行?
myChan := make(chan interface{})
confirms := ch.NotifyPublish(make(chan amqp.Confirmation, 1))
myChan = confirms // (<- cannot use type chan Confirmation in type chan interface{} assignment
【问题讨论】:
-
你没有泛型通道类型,因为 Go 目前没有泛型。
chan interface{}和chan amqp.Confirmation是不同的类型。 -
但是空接口是泛型类型的近似值。如果我创建 chan interface{},我可以传输字符串、整数或其他类型,并使用开关来处理输出。如果通道可以以与类型无关的行为进行操作,那么似乎有一种方法可以创建一个与类型无关的通道并将其他通道分配给它。
-
Go 类型是不变的,所以如果你试图模糊地将接口定义为“泛型类型的近似”,
chan A和chan B是不同的(可能不清楚, 但interface{}在功能上与任何其他接口没有什么不同,它只是没有方法)。 -
假设这段代码可以编译,你希望
myChan <- "foo"怎么工作?特别是,确认的接收者会看到什么?