Как определить динамический интерфейс / структуру - PullRequest
0 голосов
/ 16 ноября 2018

Я довольно новичок в Go и действительно ищу какое-то руководство.

В моем приложении есть канал, который принимает события, я хотел бы иметь такой интерфейс:

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

, где структура data зависит от type.

Тогда код, который прослушивает эти события в канале, будет знать, какую структуру ожидать в зависимости от типа события.

Как я могу определить такой интерфейс? Это считается хорошей практикой в ​​го?

Заранее спасибо

1 Ответ

0 голосов
/ 16 ноября 2018

Вы ищете 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)
        }
    }
}
...