为了账号安全,请及时绑定邮箱和手机立即绑定

恐慌:SetUint 使用使用未导出字段获得的值

恐慌:SetUint 使用使用未导出字段获得的值

Go
哈士奇WWW 2023-05-08 16:07:04
从接收到的字节缓冲区服务器,我想复制结构。缓冲区的格式是固定大小的字节,如下所示。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
    ...
}


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信