首页 > 后端开发 > Golang > Go Channels 可以处理多种数据类型吗?

Go Channels 可以处理多种数据类型吗?

Mary-Kate Olsen
发布: 2024-11-03 13:55:30
原创
286 人浏览过

Can Go Channels Handle Multiple Data Types?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板