我有一个看起来像这样的结构:type Record struct { Name string QuestionType [2]byte // Array may be arbitrary length Class [3]byte}我试图用来自 a 的字节填充结构bytes.Buffer(由于字节数据的一些额外的复杂性,我无法使用 binary.Read。)我正在使用reflect包来迭代结构的元素,并从bytes.Buffer 进入结构。func fillStructure(buffer *bytes.Buffer) *Record { // This is hard-coded now, but will be passed in as an interface later myStruct := Record{} reflectedStruct := reflect.ValueOf(&myStruct).Elem() for i := 0; i < reflectedStruct.NumField(); i++ { field := reflectedStruct.Field(i) if field.Kind() == reflect.Array { // Copy bytes from buffer into structure } } return &myStruct}但是,当我尝试用缓冲区中的 n 个字节填充 [n] 字节数组时,我发现自己无法将返回的切片复制buffer.Next(n)到结构中的数组中。field.Set() 不起作用,因为 []byte 与 [n]byte 不兼容。copy() 不起作用,因为我找不到获取结构数组切片的方法问题:有没有办法获得反射结构数组的切片“视图”,以便我可以复制值?或者通过其他方式将缓冲区返回的切片复制到结构中?
1 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
copy 如果您“欺骗”数组使其认为它是一个切片,则确实有效。
copy(myStruct.QuestionType[:], buffer.Bytes())
在您的情况下,您可以reflect.Copy与上述技术一起使用,如下所示:
if field.Kind() == reflect.Array {
srcArr := [2]byte{}
copy(srcArr[:], buffer.Bytes())
reflect.Copy(field, reflect.ValueOf(srcArr))
}
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消