在Go中设计信号或事件API是否有优先的方式?

我正在设计一个包,我想根据观察者模式提供一个API:也就是说,我想发出一个会触发零个或更多的感兴趣方的信号.有关方面不一定需要了解彼此.

我知道我可以从头开始实现一个这样的API(例如,使用一组通道或回调函数),但是想知道是否有一种首选的构建这样的API的方法.

在我玩过的许多语言或框架中,已经有一些标准的方法来构建这些API,以便它们以用户期望的方式表现:例如用于JavaScript DOM应用程序的glib应用程序,事件和addEventListener()的g_signal_ *函数或.NET的多播委托.

Go有什么类似的吗?如果没有,还有其他方式来构建这种在Go中更加惯用的API?

我会说,从频道接收的goroutine在某种程度上是观察者的类比.在Go中公开事件的惯用方法将是IMHO从包(函数)返回信道.另一个观察结果是,Go程序中的回调并不常用.其中的原因之一也是强大的select statement的存在.

正如我最后一句话:有些人(我也是)认为GoF模式是反模式.

http://stackoverflow.com/questions/13928080/is-there-a-preferred-way-to-design-signal-or-event-apis-in-go

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在Go中设计信号或事件API是否有优先的方式?