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:
....
}
}
Verwandte Themen
- 1. Gibt es eine Möglichkeit, ein Kalenderereignis über UIActivityViewController zu senden?
- 2. Gibt es eine Möglichkeit, NHibernate einen Deadlock-Hinweis zu senden?
- 3. Gibt es einen Zweck, einen eindirektionalen Kanal zu "machen"?
- 4. Gibt es eine Möglichkeit, einen WCF-Kanal ohne Sitzung zu stören?
- 5. Gibt es eine Möglichkeit, Konsolenprogramme über die Befehlszeile zu debuggen?
- 6. Gibt es eine Möglichkeit, eine laufende Android-App an jemanden zum Testen zu senden?
- 7. Gibt es eine Möglichkeit, Standardbilder Ordner über Javascript zu erkennen?
- 8. Gibt es eine Möglichkeit, Binärdaten mit XMLHttpRequest-Objekt zu senden?
- 9. Gibt es eine Möglichkeit, eine Druckaufgabe mithilfe von http an einen IPP-fähigen Netzwerkdrucker zu senden?
- 10. Gibt es eine Möglichkeit, hsqldb Protokollierung zum Schweigen zu bringen?
- 11. Gibt es eine Möglichkeit, einen Z-Index-Kreis zu erstellen?
- 12. Gibt es eine Möglichkeit, automatisch einen Screenshot einer Website über eine URL zu erstellen?
- 13. Gibt es eine Möglichkeit, einen Subprozess mit Pydev zu debuggen?
- 14. Gibt es eine Möglichkeit, Creeps zu löschen?
- 15. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 16. Gibt es eine Möglichkeit, einen Dateityp mit Webpack zu ignorieren?
- 17. Gibt es eine Möglichkeit, einem Optionselement einen Rahmen zu geben?
- 18. Gibt es eine Möglichkeit, "träge" zu lesen?
- 19. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 20. Gibt es eine Möglichkeit, über ein Wörterbuch zu iterieren?
- 21. Gibt es eine kurze Möglichkeit, indexOf über 100 zu schreiben?
- 22. Gibt es eine Möglichkeit, mit OneNote über Code zu kommunizieren?
- 23. Gibt es eine Möglichkeit, Sound über PowerShell zu erkennen?
- 24. Gibt es eine Möglichkeit, PHP-Post-Anfragen ohne einen Webserver zu senden?
- 25. Gibt es eine Möglichkeit zum Lesen und Schreiben in einen EEPROM über I2C mit USB-Anschluss?
- 26. Gibt es eine Möglichkeit, einen JSON über einen POI mit seiner CID zu erhalten?
- 27. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 28. Gibt es eine Möglichkeit, einen Selektor auf einem Socket-Kanal abzumelden
- 29. Gibt es eine Möglichkeit, eine PHP-Warnung anzuzeigen oder zu werfen?
- 30. In stackless Python, können Sie einen Kanal über einen Kanal senden?