从接收到的字节缓冲区服务器,我想复制结构。缓冲区的格式是固定大小的字节,如下所示。00000000 83 27 48 12 6c 00 00 00 01 02 00 00 01 01 00 02 |.'H.l...........|00000010 10 01 d2 02 96 49 00 00 00 00 87 d6 12 00 00 00 |.....I..........|00000020 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|00000030 00 02 01 02 3c 01 01 00 00 00 01 01 01 01 18 10 |....<...........|00000040 2c 01 90 01 01 6c 07 03 c8 02 01 02 03 9c 0a 0b |,....l..........|00000050 0c 00 00 00 01 01 00 00 00 00 00 00 00 01 01 01 |................|00000060 01 01 01 01 01 01 01 01 01 00 01 01 01 00 00 00 |................|我的结构在下面。type HeaderT struct { magicValue [8]byte bodyLength [4]byte bodyVersion [1]byte ...}我的实现在下面。func onMessageReceived(client MQTT.Client, message MQTT.Message) { payload := message.Payload() fmt.Printf("Received message on topic: %s\nMessage: \n%s\n", message.Topic(), hex.Dump(payload)) header := HeaderT {} err := binary.Read(bytes.NewBuffer(payload[:]), binary.LittleEndian, &header) // <-- error occurred at this line ...}我的代码如下所示引起恐慌。
1 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
问题是没有一个HeaderT
字段是“公共的”。
请注意,所有字段都以小写字母开头 - 这意味着这些字段对于包外的任何代码都无法访问。
从规格:
导出的标识符
可以导出标识符以允许从另一个包访问它。如果两者都导出标识符:
标识符名称的第一个字符是 Unicode 大写字母(Unicode 类“Lu”);和
标识符在包块中声明,或者它是字段名称或方法名称。
不会导出所有其他标识符。
尝试通过将他们的名字大写来导出它们:
type HeaderT struct { MagicValue [8]byte BodyLength [4]byte BodyVersion [1]byte ... }
- 1 回答
- 0 关注
- 99 浏览
添加回答
举报
0/150
提交
取消