我正在运行一段通过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 关注
- 231 浏览
添加回答
举报
0/150
提交
取消