interface - Golang : Can I cast to chan interface{}

标签 interface casting go publish-subscribe channel

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

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/

相关文章:

java - 根据传入的字符串转换到对象中

java - 在 Eclipse Java 中实现多个类的接口(interface)

go - interface{} 变量到 []interface{}

c++ - C++中的类型转换

go - 无法运行 go 权限被拒绝?

xml - 解析xml中的重复字段

go - Main Re声明

java - 避免类型转换的更好方法?

Typescript 泛型接口(interface)<T> 扩展同名

c# - 将 C# DynamicObject 转换为任意类型