我正在運行一段通過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.Unmarshal
return并更改返回類型。
- 1 回答
- 0 關注
- 258 瀏覽
添加回答
舉報
0/150
提交
取消