Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Interface go中的类型不可知通道_Interface_Go_Channel - Fatal编程技术网

Interface go中的类型不可知通道

Interface go中的类型不可知通道,interface,go,channel,Interface,Go,Channel,我仍然在思考golang中的接口。是否可以通过一个“通用”通道发送多个不同的类型 这里有一个非常简单的例子:。是的,这是可能的。例如,在您的代码中,您可以使用: greet: make(chan pet) 然后,您将能够无缝地发送任何实现类型宠物界面的内容 如果你想发送一些完全通用的东西,你可以使用chan接口{},然后使用reflect来了解你收到东西时是什么 一个愚蠢的——可能不是惯用的——例子: ch := make(chan interface{}) go func() {

我仍然在思考golang中的接口。是否可以通过一个“通用”通道发送多个不同的类型


这里有一个非常简单的例子:。

是的,这是可能的。例如,在您的代码中,您可以使用:

greet: make(chan pet)
然后,您将能够无缝地发送任何实现
类型宠物界面的内容

如果你想发送一些完全通用的东西,你可以使用
chan接口{}
,然后使用
reflect
来了解你收到东西时是什么


一个愚蠢的——可能不是惯用的——例子:

ch := make(chan interface{})

go func() {
    select {
    case p := <-ch:
        fmt.Printf("Received a %q", reflect.TypeOf(p).Name())
    }
}() 
ch <- "this is it"
ch:=make(chan接口{})
go func(){
挑选{

案例p:=我认为,通常情况下,在诉诸反射之前,您需要使用类型开关。要获取类型名称,您可以将格式选项%T与值一起使用。不需要
reflect
。@BurntSushi5感谢您的评论!虽然有点晚了,但修改了您的代码,使其实际工作。不过,我不会这样写。@slaxor情况如何晚了5年?:D
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)
}