首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在go中设计连接器

如何在go中设计连接器
EN

Stack Overflow用户
提问于 2013-08-28 15:13:56
回答 1查看 68关注 0票数 0

我正在go中构建一个简单的连接器组件,其职责如下:

  1. 打开、保持和管理与外部服务的连接(即在后台运行)。
  2. 将传入的数据解析为逻辑消息,并将这些消息传递给业务逻辑组件。
  3. 从业务逻辑向外部服务发送逻辑消息。

我还没有决定如何在go中设计连接器接口。

变体A)入站通道,出站消息函数调用

代码语言:javascript
复制
// 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)入站和出站消息的通道

代码语言:javascript
复制
// 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看起来更干净,更像“去”,但我正在寻找答案:

  • 有什么“熟能生巧”的方法吗?
  • 或者,备选案文A或B在哪种情况下应优先考虑?
  • 对于这种问题,还有其他值得注意的变体吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-28 16:02:16

这两种方法只允许一个侦听器(除非跟踪侦听器的数量,这是一种比较脆弱的方法),这是一个限制。这都取决于您的编程首选项,但我可能会使用传入消息的回调和发送方法:

代码语言:javascript
复制
func OnReceive(func(*Message) bool) // If callback returns false, unregister it.

func Send(*Message)

除此之外,你提出的两个模型都是完全有效的。第二种似乎更“正交”。使用send方法的一个优点是,您可以确保它不会阻塞,而不是“裸”通道。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18491845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档