我正在go中构建一个简单的连接器组件,其职责如下:
我还没有决定如何在go中设计连接器接口。
变体A)入站通道,出站消息函数调用
// Listen for inbound messages.
// Inbound messages are delivered to the provided channel.
func Listen(msg chan *Message) {...}
// Deliver msg to service
func Send(msg *Message) {...}变体B)入站和出站消息的通道
// Listen for inbound messages + send outbound messages.
// Inbound messages are delivered to the provided msgIn channel.
// To send a message, put a message into the msgOut channel.
func ListenAndSend(msgIn chan *Message, msgOut chan *Message) {...}对我来说,变式B看起来更干净,更像“去”,但我正在寻找答案:
发布于 2013-08-28 16:02:16
这两种方法只允许一个侦听器(除非跟踪侦听器的数量,这是一种比较脆弱的方法),这是一个限制。这都取决于您的编程首选项,但我可能会使用传入消息的回调和发送方法:
func OnReceive(func(*Message) bool) // If callback returns false, unregister it.
func Send(*Message)除此之外,你提出的两个模型都是完全有效的。第二种似乎更“正交”。使用send方法的一个优点是,您可以确保它不会阻塞,而不是“裸”通道。
https://stackoverflow.com/questions/18491845
复制相似问题