Go 中类型不可知的通道
问题:
在 Go 中,是否可以通过单个通道发送多种类型的数据?
示例:
以下代码尝试通过通道发送不同类型:http://play.golang。 org/p/7p2Bd6b0QT.
答案:
是的,可以在 Go 中创建类型不可知的通道。要通过通道发送多种类型,请使用:
greet := make(chan pet)
通过此修改,您可以发送实现 pet 接口的任何类型。
发送通用数据:
如果需要发送完全通用的数据,请创建 chan interface{} 类型的通道,并使用反射来确定接收到的数据类型。
示例:
ch := make(chan interface{}) go func() { select { case p := <-ch: fmt.Printf("Received a %q", reflect.TypeOf(p).Name()) } }() ch <- "this is it"
使用类型开关:
作为反射的替代方案,您可以将类型开关与 select 语句一起使用,如下所示:
p := <-ch switch p := p.(type) { case string: fmt.Printf("Got a string %q", p) default: fmt.Printf("Type of p is %T. Value %v", p, p) }
以上是Go Channels 可以处理多种数据类型吗?的详细内容。更多信息请关注PHP中文网其他相关文章!