一尘不染

Golang:我可以投射到chan界面{}

go

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

type Subscriber interface{
    Subscribe(addr string) chan interface{}
}

假设有一个我想使用的库,其中包含一个subscription方法,但是使用了一个库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并触发通用通道中发生的任何事情,但是我并不特别喜欢为了引入类型转换而不得不引入另一个通道。


阅读 205

收藏
2020-07-02

共1个答案

一尘不染

不,您不能仅使用演员表就可以做到这一点。您已经考虑过,必须使用额外的渠道。幸运的是,已经有一个用于此的帮助程序库(免责声明:我已经写过)。您需要该Wrap功能。

2020-07-02