我正在开发一种物联网服务,该服务需要能够通过某种协议发送消息。我的目标是让我更容易在这些协议实现之间切换。
在物联网中,用于消息传递的两种常见协议是MQTT和WAMP。用于这些协议的两个流行的Go库都有相似的接口,但是它们各自的函数实现的参数不同。
例:
断续器
Publish(topic string, qos byte, retained bool, payload interface{}) Token
万普
Publish(topic string, options wamp.Dict, args wamp.List, kwargs wamp.Dict) error
我最初的想法是定义一个通用接口,在其中筛选出我真正需要的所有参数:
Publish(topic string, payload map[string]interface{}, options map[string]interface{}) map[string]interface{}
但是,由于对于两个库,签名完全不同,因此我被迫使用该类型。这反过来又会迫使我做很多类型断言魔术和额外的工作来使这项工作正常工作。interface{}
我是否完全错过了一些明显的东西?这个问题的更好解决方案是什么?或者我应该以完全不同的方式解决这个问题。
猛跑小猪
相关分类