gpt4 book ai didi

reflection - 将 slice 复制到反射数组中

转载 作者:IT王子 更新时间:2023-10-29 02:23:24 26 4
gpt4 key购买 nike

我有一个看起来像这样的结构:

type Record struct {
Name string
QuestionType [2]byte // Array may be arbitrary length
Class [3]byte
}

我试图用 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]byte 数组时,我发现自己无法将 buffer.Next(n) 返回的 slice 复制到数组中结构。

  • field.Set() 不起作用,因为 []byte 与 [n]byte 不兼容。
  • copy() 不起作用,因为我找不到获取结构数组 slice 的方法

问题:有没有办法获取反射结构数组的 slice “ View ”,以便我可以将值复制进去?或者通过其他方式将缓冲区返回的 slice 复制到结构中?

最佳答案

copy 如果您“欺骗”数组以为它是一个 slice ,则确实有效。

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))
}

关于reflection - 将 slice 复制到反射数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35963741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com