In GOLANG c'è un modo semplice per trasmettere le strutture per il comportamento polimorfico attraverso i canali? Sto provando ad inviare versioni diverse di una struct su un canale, quindi per esempio avrò diversi tipi di eventi, come un LoginEvent. Ognuno avrà diverse quantità di dati nella struttura.C'è un modo per eseguire il cast di Structs per l'invio su un canale
19
A
risposta
24
Il modo idiomatico da fare è, è utilizzare le interfacce e quindi eseguire un tipo di asserzione sul lato ricevente. La tua struttura Event
dovrebbe essere idealmente un'interfaccia.
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.
Quindi è possibile definire il canale di accettare tutto ciò che si qualifica come l'interfaccia Event
.
ch := make(chan Event)
L'estremità di ricezione riceve gli oggetti Event
e può fare un tipo asserzione vedere che tipo concreto sottende:
select {
case evt := <- ch:
if evt == nil {
return
}
switch evt.(type) {
case *LoginEvent:
case *UserEvent:
....
}
}
Problemi correlati
- 1. Modo generico per eseguire il cast di enum in C++
- 2. Come eseguire il cast value su enum
- 3. Come eseguire il cast su un oggetto per un tipo quando il tipo è noto durante il runtime?
- 4. Un buon modo per eseguire il debug di nullPointerException
- 5. Sklearn: Esiste un modo per eseguire il debug di Pipelines?
- 6. C'è un modo per ottenere gli utenti di un canale IRC senza aderirvi?
- 7. Un modo semplice per eseguire test su una gemma?
- 8. Sqlite: come eseguire il cast (dati come TEXT) per BLOB
- 9. Come eseguire il cast di IntPtr su byte *
- 10. Estrazione un array di Structs in Hive
- 11. È possibile eseguire il cast di intero su enum?
- 12. Come posso determinare il canale SATA per un dato disco?
- 13. Esiste un modo per eseguire Trac offline?
- 14. come eseguire un webservice RESTful sullo stack di servizio su un canale https (ssl)
- 15. Come eseguire il cast per enum in C++?
- 16. Perché devo eseguire il cast esplicito di JValue su un tipo di destinazione prima di utilizzarlo?
- 17. ClassCastException: impossibile eseguire il cast di org.apache.xerces.parsers.XIncludeAwareParserConfiguration su org.apache.xerces.xni.parser.XMLParserConfiguration
- 18. Impossibile eseguire il cast Provider azione per Condividere Provider azione
- 19. Tempo corretto per eseguire il cast e convertire in C#
- 20. Come eseguire il cast di JObject in JSON.Net su T
- 21. In che modo static_cast può eseguire il cast di un int in char ma non reinterpret_cast?
- 22. Un modo per chiedere un metodo per il suo nome?
- 23. .NET: impossibile eseguire il cast dell'oggetto per interfacciare implementa
- 24. Non è possibile eseguire il cast di ReceiverRestrictedContext su android.app.Activity
- 25. Esistono soluzioni per rendere il dispositivo Android un Cast Receiver?
- 26. Corretto il modo "Rails" per eseguire javascript su pagine specifiche
- 27. Un modo semplice per eseguire un layout dinamico ma quadrato
- 28. C'è un modo per eseguire il casting di tipo implicito dinamico in C#?
- 29. C'è un modo per eseguire Dart's Future in modo sincrono?
- 30. C'è un modo per eseguire un comando su tutti i dynos di Heroku?