作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在构建一个简单的连接器组件,具有以下职责:
我不确定如何在 go 中设计连接器的接口(interface)。
变体 A) 入站 channel ,出站消息函数调用
// 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) 入站和出站消息的 channel
// 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 对我来说似乎更干净,更“像 go-like”,但我正在寻找以下问题的答案:
最佳答案
这两种方法都只允许一个监听器(除非您跟踪监听器的数量,这是一种有点脆弱的方法),这是一个限制。这完全取决于您的编程偏好,但我可能会使用传入消息的回调和发送方法:
func OnReceive(func(*Message) bool) // If callback returns false, unregister it.
func Send(*Message)
除此之外,您提出的两个模型都是完全有效的。第二个似乎更 “正交”。使用发送方法的一个优点是您可以确保它永远不会阻塞,这与“裸” channel 相反。
关于connection - 如何在 go 中设计连接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18491845/
我是一名优秀的程序员,十分优秀!