2016-07-26 48 views
0

我写了一个封装了一堆逻辑和功能的SDK。在Go中使用通道处理事件

通常,我会使用事件侦听器/回调函数向使用SDK的应用程序提供反馈,但这在Go中不是惯用的。

这是我的理解,渠道和goroutines填补回调的空白,但是什么是一个方法来实现呢?

举例来说,我的SDK有许多我想通知主应用程序的事件。我会使用一个基于Event结构的通道吗?该Event将包含指定事件类型的_type字段,然后data类型的interface{}字段,类似于Java中的Object。接收器会检查类型并相应地投射数据。

无论是上述方法还是一个事件通道,应用程序都会监听与其关联的任何通道。

为了记录我更喜欢前一种方法,但不确定它的实现。

有没有人实现过这之前,你是如何实现的?

+2

Go中没有任何单一的回调函数。由于某种原因,Go对函数式编程提供了一流的支持。甚至标准库使用回调的数量也很多(例如,整个HTTP服务器实现基于处理程序回调)。频道很棒,但他们不需要习惯功能性编程的_exclusion_。 – Kaedys

+1

因为'interface {}'包含一个类型和值,所以不需要'Event'类型。该应用可以在“interface {}”值上键入开关或输入assert。 –

回答

0

看看我的https://github.com/tideland/gocells。这是一个事件驱动应用程序库。这里所谓的单元格是以负责处理事件的行为开始的,这些单元格是连接的。

也许你可以使用它或得到一些灵感。