GoLang - 填充结构数组

时间:2017-10-25 20:51:43

标签: go struct

我有以下2个结构

     type AAAA struct{
        Aa  [2]byte
        Ab  [2]byte
        Ac  [3]byte
    }       
    type BBBB struct{
        Ba  [4]byte
        Bb  [2]byte
        Bc  [3]byte
        Bd  [2]byte   // No Of Struct AAA Items
        BBStr  []AAAA
    }

所以Struct BBB在Struct AAA中重复

然后我有一个我输入的字符串,其中包含作为输入结构的值

输入:=" aaaabbccc02ddeefffddeefff" (此处02结构AAAA在结构BBBB中重复)#

我需要读取输入字符串并填充BBBB结构,包括结构AAA数组

我写了下面的函数来实现这个目的。但我得到"错误 - binary.Read:无效类型* main.BBBB

需要帮助来确定此错误的原因?还有办法以不同的方式做到这一点吗?

    func main() {
        input := "aaaabbccc02ddeefffddeefff"
        var k BBBB
        var j AAAA
        k.BBStr = append(k.BBStr,j)
        k.BBStr = append(k.BBStr,j)
        xyz := []byte(input)
        err := binary.Read(bytes.NewReader(xyz), binary.LittleEndian, &k)
        if err != nil {
            fmt.Println("Bad error - ",err)
        }
        fmt.Println("Structure Definition - ",k)
    }

1 个答案:

答案 0 :(得分:0)

https://golang.org/pkg/encoding/binary/#Read处的文档说:

  

数据必须是指向固定大小值或固定大小值切片的指针。

表示在编译时必须知道Read类型的大小。您的struct BBBB包含一片[]AAAA,这意味着它的长度仅在运行时才知道。如果你把它做成一个固定大小的数组,例如[16]AAAA,它会起作用。