我刚刚开始在 go 中使用并发。我有其他语言并发方面的经验,并且很遗憾如果您尝试写入封闭的通道会引发恐慌。
这种模式会非常有用,因为您可以解耦 actor 的生命周期并使它们独立。这使您不必同步清理它们。本质上,我可以让读者在关闭之前关闭通道,并通过通道上的写入错误通知任意数量的写入者并停止阻塞(取消)。
因此,我编写了一个通用函数来处理这种形式的消息传递:
/// Sends a message to a remote general channel.
/// Returns true if the message was sent (the send stopped blocking) or false if
/// the sender closed the channel.
/// When the channel is unbuffered, this function returning true means that the
/// sender has received the message and is acting on it.
func SendRemoteCmd(ch chan interface{}, msg interface{}) bool {
defer func() {
recover()
}()
ch <- msg
return true
}
效果很好,就是怕golang开发者会生气,打电话告诉我,他们看了这段代码会“找到我”。语言之神之所以决定这首先应该是恐慌,可能也有一些很好的理由。如果是这种情况,您建议采用什么设计?
大话西游666
相关分类