2016-07-26 21 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。這是一個事件驅動應用程序庫。這裏所謂的單元格是以負責處理事件的行爲開始的,這些單元格是連接的。

也許你可以使用它或得到一些靈感。