2016-07-26 22 views
0

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?

+2

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

+1

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. –

Antwort

0

Werfen Sie einen Blick auf meine https://github.com/tideland/gocells. Es ist eine Bibliothek für ereignisgesteuerte Anwendungen. Hier werden sogenannte Zellen mit Verhaltensweisen gestartet, die für die Verarbeitung der Ereignisse verantwortlich sind, diese Zellen sind miteinander verbunden.

Vielleicht können Sie es verwenden oder sich inspirieren lassen.