Golang:我可以投射到 chan 接口吗{}

2024-04-25

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

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

假设有一个我想使用的库,其中有一个 subscribe 方法,但它使用chan library.Object。我希望能够做类似的事情:

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

目前,我认为这样的演员阵容是不可能的。而且我不想修改底层库,因为包装器应该与库实现无关。

我见过有没有办法强制转换结构以通过通道发送 https://stackoverflow.com/questions/13425490/is-there-a-way-to-cast-structs-for-sending-over-a-channel,但在这种情况下,可以修改应用程序以满足需要。在这里,不能。这可能吗?有没有更好的办法?

一种解决方案是将通用通道传递到订阅中,并无限期地等待chan library.Object并触发我的通用频道上通过的任何内容,但我并不特别喜欢引入另一个频道只是为了绕过类型转换。


不,你不能只用演员来做到这一点。正如您已经考虑过的,您必须使用额外的通道。幸运的是,已经有一个用于此目的的帮助程序库(免责声明:我编写了它)。你想要的Wrap功能。

  • 文档:https://godoc.org/github.com/eapache/channels#Wrap https://godoc.org/github.com/eapache/channels#Wrap
  • Code: https://github.com/eapache/channels/ https://github.com/eapache/channels/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang:我可以投射到 chan 接口吗{} 的相关文章

随机推荐