我正在尝试为订阅编写通用包装,例如:
type Subscriber interface{ Subscribe(addr string) chan interface{} }
假设有一个我想使用的库,其中包含一个subscription方法,但是使用了一个库chan library.Object。我希望能够执行以下操作:
chan library.Object
func (s *mySubscriber) Subscribe(addr string) chan interface{}{ ch := make(chan library.Object) library.Subscribe(addr, ch) return chan interface{}(ch) }
目前,我认为这样的转换是不可能的。而且我不想修改基础库,因为包装器应该与库实现无关。
我已经看到有没有一种方法可以投射Structs以便通过通道发送,但是在那种情况下,可以根据需要修改应用程序。在这里,它不能。这可能吗?有没有更好的办法?
一种解决方案是将通用通道传递到Subscribe中,然后无限期地等待chan library.Object并触发通用通道中发生的任何事情,但是我并不特别喜欢为了引入类型转换而不得不引入另一个通道。
不,您不能仅使用演员表就可以做到这一点。您已经考虑过,必须使用额外的渠道。幸运的是,已经有一个用于此的帮助程序库(免责声明:我已经写过)。您需要该Wrap功能。
Wrap