In GOLANG gibt es eine einfache Möglichkeit, Strukturen für polymorphes Verhalten über Kanäle zu werfen? Ich versuche, verschiedene Versionen einer Struktur über einen Kanal zu senden, also werde ich zum Beispiel verschiedene Arten von Ereignissen haben, wie ein LoginEvent. Jeder hat unterschiedliche Datenmengen in der Struktur.Gibt es eine Möglichkeit, Structs zum Senden über einen Kanal zu werfen
19
A
Antwort
24
Der idiomatische Weg zu tun ist, Schnittstellen zu verwenden und dann eine Typassertion auf der empfangenden Seite zu tun. Ihr Event
struct sollte idealerweise eine Schnittstelle sein.
type Event interface {
// Methods defining data all events share.
}
type UserEvent struct {
Name string
}
// Define methods on *UserEvent to have it qualify as Event interface.
type LoginEvent struct {
...
}
// Define methods on *LoginEvent to have it qualify as Event interface.
Dann können Sie Ihren Kanal definieren, alles zu akzeptieren, die als Event
Schnittstelle qualifiziert.
ch := make(chan Event)
Das Empfangsende werden die Event
Objekte erhalten und eine Art Behauptung tun können, um zu sehen, was es konkreter zugrunde liegt:
select {
case evt := <- ch:
if evt == nil {
return
}
switch evt.(type) {
case *LoginEvent:
case *UserEvent:
....
}
}