【问题标题】:for callback, passing channels as data through other channels [closed]对于回调,将通道作为数据通过其他通道传递[关闭]
【发布时间】:2020-03-26 21:11:15
【问题描述】:

我正在尝试将通道作为成员包含到结构中。当一个启动器通过通道将结构的实例传递给不同的 goroutine 时(将同时有多个启动器),该结构的实例将被逐步处理。 通道成员将作为回调,将每一步的结果返回给发起者。

那么,通过其他渠道将渠道作为数据传递是一种好习惯吗? 我应该改用频道的指针吗? 有没有其他推荐的模式?

=================一些额外的想法==============

比较有一个全局同步。将映射启动器映射到回调通道以供每个 goroutines 查找,我真的应该通过通道发送回调通道吗?

【问题讨论】:

  • 没有理由使用通道指针,除非您需要接收器来修改它。除此之外,通过频道发送频道是否是一种好方法是意见和/或实施的问题。
  • @Flimzy 谢谢!好吧,我想我不希望接收者修改回调通道。所以,没有指针。
  • @Flimzy 至于这是否是一个好方法,你能解释一下你提到的观点和/或实现吗?
  • 不,该主题太宽泛,无法在评论中涵盖,而且对于问题/答案来说是题外话。更好的方法是解释你的实际目标,而不是笼统地抽象。

标签: go channel


【解决方案1】:

这不是一个坏习惯。将一个通道传递到另一个通道并使用它来收集结果是完全可以的。

请注意,您所描述的并不完全是回调,因为 go 例程不调用任何东西。它只是在通过通道传输的通道中写入数据。

如果你在通道中传递了一个函数并且 goroutine 会调用它,那么你就会有一个回调。

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 2014-05-02
    • 2018-06-17
    • 1970-01-01
    • 2017-05-23
    • 2016-06-09
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多