我正在尝试为订阅编写一个通用包装器,例如:
type Subscriber interface{
Subscribe(addr string) chan interface{}
}
假设我想使用一个库,其中有一个订阅方法,但它使用 chan library.Object
。我希望能够做类似的事情:
func (s *mySubscriber) Subscribe(addr string) chan interface{}{
ch := make(chan library.Object)
library.Subscribe(addr, ch)
return chan interface{}(ch)
}
目前,我认为这样的 Actor 阵容是不可能的。而且我不想修改底层库,因为包装器应该与库实现无关。
我见过 Is there a way to cast Structs for sending over a channel ,但在这种情况下,可以修改应用程序以满足需要。在这里,它不能。这可能吗?有没有更好的办法?
一种解决方案是将通用 channel 传递给订阅,并无限期地等待 chan library.Object
并触发来 self 的通用 channel 的任何内容,但我不是特别喜欢必须引入另一个 channel 才能绕过类型转换。
最佳答案
不,你不能只用类型转换来做到这一点。正如您已经考虑过的,您必须使用额外的 channel 。幸运的是,已经有一个帮助库(免责声明:我写了它)。你想要 Wrap
函数。
关于interface - Golang : Can I cast to chan interface{},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25593367/