亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有通用功能但功能參數不同的 API 的通用接口

具有通用功能但功能參數不同的 API 的通用接口

Go
慕碼人2483693 2022-08-01 17:29:33
我正在開發一種物聯網服務,該服務需要能夠通過某種協議發送消息。我的目標是讓我更容易在這些協議實現之間切換。在物聯網中,用于消息傳遞的兩種常見協議是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{}我是否完全錯過了一些明顯的東西?這個問題的更好解決方案是什么?或者我應該以完全不同的方式解決這個問題。
查看完整描述

1 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

我建議創建自己的API(按照您需要的方式定義它),然后圍繞實現API的每個庫構建一個包裝器。在每個包裝器中,您可以按照庫實現它的方式應用所需的功能。(我想這就是你正在嘗試的。

該函數可能如下所示:Publish

Publish(topic string, payload map[string]interface{}) error

有效負載可以很容易地轉換為,因為它也是一個.它也可以傳遞給 MQTT,因為它接受任何 .wamp.Dictmap[string]interfac{}interface{}

不要試圖從外部傳遞選項。而是根據需要在包裝器中設置它們?;蛘?,如果您需要將它們與外部設置不同,請定義自己的設置,并根據每個包的需要解釋它們。

僅返回錯誤。在 MQTT 的情況下,請正確解釋 MQTT 的包裝器內部。Token


查看完整回答
反對 回復 2022-08-01
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號