如何定义动态 interface/struct

How to define dynamic interface/struct

我是 Go 的新手,正在寻找一些指导。

在我的应用程序中,我有一个接收事件的通道,我想要一个像这样的界面:

{
  "type": "event1",
  "data": {}
}

data 的结构取决于 type

然后在通道中侦听这些事件的代码将根据事件的类型知道期望什么样的结构。

如何定义这样的接口? 这在 Go 中被认为是一种好的做法吗?

提前致谢

您正在寻找 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)
        }
    }
}