如何迭代字节片并将其赋值给结构体的字段?
type s struct {
f1 []byte
f2 []byte
f3 []byte
}
func S s {
x := s{}
x.f1 = make([]byte, 4)
x.f1 = make([]byte, 2)
x.f1 = make([]byte, 2)
return x
}
func main() {
data := []byte{83, 117, 110, 83, 0, 1, 0, 65}
Z := S()
//pesudo code from here
i:= 0
for field in Z {
field = data[i:len(field)]
i += len(field)
}
预期:
- f1 = [83,117,110,83]
- f2 = [0,1]
- f3 = [0,65]
我以前在C/C++中做过这个,但我不知道在Go语言中如何做。我需要赋值函数是泛型的,因为我将有几个不同的结构体,其中一些可能在流中不存在。
理想情况下,我希望传入初始化的结构体,我的代码将遍历结构体字段,填充它们。
2条答案
按热度按时间kt06eoxx1#
利用二进制/编码包中的反射代码。
步骤1:将字段声明为数组而不是切片。
步骤2:使用二进制将数据解码为结构体。
第3步:完成!
https://go.dev/play/p/H-e8Lusw0RC
i7uaboj42#
您可以使用
reflect.Copy
。与内置的copy
一样,它会将数据复制到目标中,复制的长度不超过目标的长度。请确保您需要设置的字段已导出。由于
data
假定始终为[]byte
,因此可以直接对其进行子切片。或者,您可以使用
reflect.Value#Slice
:Playground:https://go.dev/play/p/o1MR1qrW5pL