gpt4 book ai didi

go - 在 Go 中是否有设计信号或事件 API 的首选方法?

转载 作者:IT老高 更新时间:2023-10-28 13:04:45 25 4
gpt4 key购买 nike

我正在设计一个包,我想在其中提供基于观察者模式的 API:也就是说,我想在某些点发出一个信号,触发零个或多个相关方。那些利益相关方不一定需要相互了解。

我知道我可以从头开始实现这样的 API(例如,使用 channel 集合或回调函数),但想知道是否有构建此类 API 的首选方式。

在我使用过的许多语言或框架中,都有构建这些 API 的标准方法,以便它们按照用户期望的方式运行:例如g_signal_* 函数用于基于 glib 的应用程序、事件和 addEventListener() 用于 JavaScript DOM 应用程序,或用于 .NET 的多播委托(delegate)。

Go 有类似的东西吗?如果没有,是否有其他方式来构建这种类型的 API,在 Go 中更惯用?

最佳答案

我会说从 channel 接收的 goroutine 在一定程度上类似于观察者。因此,恕我直言,在 Go 中公开事件的一种惯用方式是从包(函数)返回 channel 。另一个观察结果是,回调在 Go 程序中不经常使用。原因之一也是强大的select statement的存在。 .

最后一点:有些人(我也是)将 GoF 模式视为 Go 反模式。

关于go - 在 Go 中是否有设计信号或事件 API 的首选方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13928080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com