我正在设计一个程序包,在该程序包中,我想基于观察者模式提供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条经验 获得超21个赞
Go为您提供了许多用于设计信号API的工具。
首先,您必须决定一些事情:
您要推还是拉模型?例如。发布者是将事件推送给订阅者还是订阅者从发布者中提取事件?
如果您想要一个推送系统,那么让订阅者为发布者提供一个发送消息的渠道就可以很好地工作。如果您要使用pull方法,那么仅一个带有互斥量的消息框将起作用。除此之外,在不了解您的要求的情况下,很难提供更多细节。
- 3 回答
- 0 关注
- 235 浏览
添加回答
举报
0/150
提交
取消