我仍然在思考 golang 中的接口(interface)。是否可以通过一个“通用” channel 发送多种不同类型?
这是一个非常简单的例子:http://play.golang.org/p/7p2Bd6b0QT .
最佳答案
是的,这是可能的。例如,在您的代码中,您可以使用:
greet: make(chan pet)
然后你就可以无缝发送任何实现type pet interface
的东西了。
如果你想发送 完全 通用的东西,你可以使用 chan interface{}
然后使用 reflect
找出它是什么当你收到东西时。
一个愚蠢的——可能不是惯用的——例子:
ch := make(chan interface{})
go func() {
select {
case p := <-ch:
fmt.Printf("Received a %q", reflect.TypeOf(p).Name())
}
}()
ch <- "this is it"
正如 BurntSushi5 指出的那样,类型切换更好:
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)
}
关于interface - 在 go 中输入不可知的 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083490/