gpt4 book ai didi

go - 具有通用功能但功能参数不同的 API 的通用接口(interface)

转载 作者:行者123 更新时间:2023-12-03 10:10:30 25 4
gpt4 key购买 nike

我正在开发一项物联网服务,该服务需要能够通过某种协议(protocol)发送消息。我的目标是让我可以轻松地在这些协议(protocol)实现之间进行交换。
在物联网中,用于消息传递的两种常见协议(protocol)是 MQTT 和 WAMP。这些协议(protocol)的两个流行的 Go 库都有相似的接口(interface),但是它们各自的函数实现的参数不同。

例子:
MQTT

Publish(topic string, qos byte, retained bool, payload interface{}) Token
WAMP
Publish(topic string, options wamp.Dict, args wamp.List, kwargs wamp.Dict) error

我最初的想法是定义一个通用接口(interface),在其中过滤掉我真正需要的所有参数:
Publish(topic string, payload map[string]interface{}, options map[string]interface{}) map[string]interface{}
然而,由于这两个库的签名完全不同,我不得不使用 interface{}类型。这反过来又会迫使我做大量的类型断言魔法和额外的工作以使其正常工作。
我完全错过了一些明显的东西吗?这个问题有什么更好的解决方案?或者我应该完全以不同的方式解决这个问题。

最佳答案

我建议创建您自己的 API(以您需要的方式定义它),然后围绕实现您的 API 的每个库构建一个包装器。然后,在每个包装器中,您可以按照库实现它的方式应用您需要的功能。 (我想这就是你正在尝试的。)Publish函数可能如下所示:

Publish(topic string, payload map[string]interface{}) error
有效载荷可以轻松转换为 wamp.Dict因为那也是 map[string]interfac{} .它也可以传递给 MQTT,因为它接受任何 interface{} .
不要试图从外部传递选项。而是根据需要在包装器中设置它们。或者,如果您需要对它们进行与外部不同的设置,请定义您自己的并根据每个包的需要对其进行解释。
只返回一个错误。如果是 MQTT,请解释 Token正确地位于 MQTT 的包装器中。

关于go - 具有通用功能但功能参数不同的 API 的通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65834524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com