我正在設計一個程序包,在該程序包中,我想基于觀察者模式提供API:也就是說,有些地方我想發出會觸發零個或多個感興趣方的信號。那些有興趣的各方不必一定要彼此了解。我知道我可以從頭開始實現這樣的API(例如,使用通道或回調函數的集合),但是我想知道是否存在構造此類API的首選方法。在我使用過的許多語言或框架中,已經存在構建這些API的標準方法,以使它們按用戶期望的方式運行:例如,g_signal_*基于glib的應用程序,事件和addEventListener()JavaScript DOM應用程序的功能,或用于。網。Go有類似的東西嗎?如果不是,是否還有其他方法可以構造這種在Go中更慣用的API?
3 回答

白板的微信
TA貢獻1883條經驗 獲得超3個贊
我要說的是,從某個通道接收的goroutine在某種程度上類似于觀察者。因此,在Go中公開事件的慣用方式是恕我直言,以從包(函數)返回通道。另一個觀察結果是,在Go程序中回調的使用不是太頻繁。原因之一也是強大者的存在select statement
。
最后一點:有些人(我也是)將GoF模式視為Go反模式。

茅侃侃
TA貢獻1842條經驗 獲得超22個贊
Go為您提供了許多用于設計信號API的工具。
首先,您必須決定一些事情:
您要推還是拉模型?例如。發布者是將事件推送給訂閱者還是訂閱者從發布者中提取事件?
如果您想要一個推送系統,那么讓訂閱者為發布者提供一個發送消息的渠道就可以很好地工作。如果您要使用pull方法,那么僅一個帶有互斥量的消息框將起作用。除此之外,在不了解您的要求的情況下,很難提供更多細節。
- 3 回答
- 0 關注
- 267 瀏覽
添加回答
舉報
0/150
提交
取消