Ich habe ein SDK geschrieben, das eine Reihe von Logik und Funktionalität kapselt.Ereignisbehandlung in Go mit Kanälen
Normalerweise würde ich Ereignis-Listener/-Rückrufe verwenden, um Feedback an die Anwendung mit dem SDK bereitzustellen, aber das ist nicht idiomatisch in Go.
Es ist mein Verständnis, dass Kanäle und Göroutinen die Leere von Rückrufen füllen, aber was ist ein Weg, dies zu implementieren?
Sagen Sie zum Beispiel, mein SDK hat eine Reihe von Ereignissen, über die ich die Hauptanwendung informieren möchte. Würde ich einen Kanal basierend auf einer Event
Struktur verwenden. Diese Event
würde ein _type
Feld enthalten, das den Ereignistyp angibt, dann ein data
Feld des Typs interface{}
ähnlich wie Object
in Java. Der Empfänger würde dann den Typ prüfen und die Daten entsprechend darstellen.
Entweder der obige Ansatz oder ein Kanal für Ereignis, dann hört die App für welche Kanäle es sich auch interessiert.
Für die Aufzeichnung bevorzuge ich den früheren Ansatz, aber unsicher über die Implementierung.
Hat jemand das vorher erreicht und wie haben Sie es implementiert?
Es gibt nichts Unidiomatisches über Rückrufe in Go. Go hat aus gutem Grund erstklassige Unterstützung für die funktionale Programmierung. Eine enorme Anzahl sogar der Standardbibliotheken verwendet Rückrufe (Beispiel: Die gesamte HTTP-Server-Implementierung basiert auf Rückrufen von Handlern). Channels sind genial, aber es gibt keinen Grund, dass sie an die _Exclusion_ der funktionalen Programmierung gewöhnt sein müssen. – Kaedys
Da eine 'Schnittstelle {}' einen Typ und einen Wert enthält, ist der Typ 'Event' nicht erforderlich. Die App kann switch oder type assert für die 'interface {}' - Werte eingeben. –