我刚接触Go,真的在寻找一些指导。
在我的应用程序中,我有一个接收事件的通道,我想有一个像这样的接口:
{
"type": "event1",
"data": {}
}
data
的结构取决于type
。
然后,侦听通道中那些事件的代码将根据事件的类型知道期望的结构。
如何定义此类接口? 这在Go中被认为是一种好习惯吗?
预先感谢
答案 0 :(得分:3)
您正在寻找type switch
:
package main
import (
"fmt"
)
type X struct {
i int
}
func main() {
c := make(chan interface{}, 5)
c <- 4
c <- "hi"
c <- X{}
close(c)
for value := range c {
switch v := value.(type) {
case int:
fmt.Println("got int", v)
case string:
fmt.Println("got string", v)
case X:
fmt.Println("got X", v)
default:
fmt.Printf("unexpected type %T\n", value)
}
}
}