,有一个给定的结构(Foo)。我发现这个概念很有趣,并且想知道对于动态类型也可以这样做。
给定以下动态结构(完美运行),您如何创建切片并附加到它?
在这里查看我的尝试:
在这个片段中,我创建了动态类型。这工作正常。
typeString := reflect.TypeOf("")
typeInteger := reflect.TypeOf(0)
fields := make(map[string]*reflect.StructField)
fields["A"] = &reflect.StructField{
Name: "A",
Type: typeString,
Tag: reflect.StructTag(`json:"a"`),
}
fields["B"] = &reflect.StructField{
Name: "B",
Type: typeInteger,
Tag: reflect.StructTag(`json:"b"`),
}
var structFields []reflect.StructField
for _, v := range fields {
structFields = append(structFields, *v)
}
structType := reflect.StructOf(structFields)
使用该结构,我们看到它工作正常:
v := reflect.New(structType)
v.Elem().FieldByName("A").SetString("qwer")
v.Elem().FieldByName("B").SetInt(123)
v2 := reflect.New(structType)
v2.Elem().FieldByName("A").SetString("asdf")
v2.Elem().FieldByName("B").SetInt(456)
//+ these look good
fmt.Printf("%v\n", v)
fmt.Printf("%v\n", v2)
然而,进入动态切片,我们得到一个错误:
reflection := reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf(structType).Elem()), 0, 0)
reflectionValue := reflect.New(reflection.Type())
reflectionValue.Elem().Set(reflection)
slicePtr := reflect.ValueOf(reflectionValue.Interface())
sliceValuePtr := slicePtr.Elem()
value := v.Elem()
// ERROR HERE
toSet := reflect.Append(sliceValuePtr, value)
需要调整什么以使所有内容都对齐并且Append?
在操场上查看以下内容:
https://play.golang.org/p/Vrx7FTlVBp9
千万里不及你
千巷猫影
SMILET
随时随地看视频慕课网APP
相关分类