Golang:我可以转换为chan接口{}

Eth*_*han 11 casting interface channel go publish-subscribe

我正在尝试为订阅编写一个通用的包装器,例如:

type Subscriber interface{
    Subscribe(addr string) chan interface{}
}
Run Code Online (Sandbox Code Playgroud)

假设有一个我想要使用的库,其中有一个订阅方法,但它使用了一个chan library.Object.我希望能够做到这样的事情:

func (s *mySubscriber) Subscribe(addr string) chan interface{}{
    ch := make(chan library.Object)
    library.Subscribe(addr, ch)
    return chan interface{}(ch)
}
Run Code Online (Sandbox Code Playgroud)

目前,我不相信这样的演员是可能的.我不想修改底层库,因为包装器应该与库实现无关.

我已经看到有没有办法将Structs转换为通过通道发送,但在这种情况下,可以修改应用程序以满足需要.在这里,它不能.这可能吗?有没有更好的办法?

一种解决方案是将一个通用通道传递给Subscribe,并且无限制地等待chan library.Object并触发通用通道上发生的任何事情,但我并不特别喜欢为了绕过类型转换而引入另一个通道.

Eva*_*van 5

不,你不能只用演员表演.正如您已经考虑过的那样,您必须使用额外的频道.幸运的是,已经有了一个帮助库(免责声明:我写了它).你想要这个Wrap功能.