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

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

自動創建結構實例

自動創建結構實例

Go
夢里花落0921 2021-04-05 16:31:52
我正在運行一段通過MQTT接收JSON的代碼。每次收到JSON(MQTT始終在運行)時,我想創建一個結構實例。我還想將該實例追加到列表中,以跟蹤我擁有的實例數量。這是我到目前為止的內容:func VirtualDevice(client MQTT.Client, deviceID string) **VirtualDevice {    type Device struct{        Type        string `json:"type"`        Value       []interface{} `json:"value"`        CaptureTime string   `json:"capture-time"`    }    type VirtualDevice struct {        Passport struct {            MessageTopic string `json:"message-topic"`            PrivateKey   string `json:"private-key"`        } `json:"passport"`        Data struct {            Sensor []Device `json:"sensor"`            Actuator struct {            } `json:"actuator"`        } `json:"data"`    }    sensorData := new(VirtualDevice)    var g MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {        err := json.Unmarshal(msg.Payload(), &sensorData)        if err != nil {            panic(err)        } else {            fmt.Printf("%+v\n", sensorData) //data_update            }    }    client.Subscribe("data-update/" + deviceID, 0, g)    return &sensorData //Error: Cannot use &sensorData (type **VirtualDevice) as type **VirtualDevice}在另一個文件中,我有這個:type Ctrl struct {    Instance []*VD}   var device *VDif len(sensorList.Instance) == 0 {            device = VirtualDevice(client, deviceID)            oldDeviceID = deviceID            sensorList.Instance = append(sensorList.Instance, device)        }else if oldDeviceID != deviceID{            device = VirtualDevice(client, deviceID)            sensorList.Instance = append(sensorList.Instance, device)        }        fmt.Println(*sensorList.Instance[0])如您所見,&sensor即使它是type ,我也無法返回**VirtualDevice。我該如何退貨?我要實現的目標在正確的軌道上嗎?(使用每個傳入的JSON創建具有相同結構的新實例,并向每個實例附加一個指針,以免丟失數據)編輯:我能夠成功返回該結構,但是當我打印出來時,*sensorList.Instance[0]我得到一個空的JSON。我究竟做錯了什么?
查看完整描述

1 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

您的函數無法返回a,**VirtualDevice因為類型的范圍是該函數。將type定義移到之外func。如果它們已在外部定義,則將其刪除。

另外,我認為您可能對指針有些困惑。new(VirtualDevice)返回指向新創建的的指針VirtualDevice(因此您sensorData的類型為*VirtualDevice)。當您使用時,&sensorData您將獲得該指針的指針。您通常不需要這樣做。您可以不將其&傳遞給json.Unmarshalreturn并更改返回類型。


查看完整回答
反對 回復 2021-04-19
  • 1 回答
  • 0 關注
  • 258 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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