1 回答
TA贡献2019条经验 获得超9个赞
需要制作一个指向结构的指针而不是一个值,并将指针的值(可以通过检索到的函数)传递给Unmarshal而不是它本身。Interface()
var tableFields []reflect.StructField
for _, v := range attrs {
tableFields = append(tableFields, reflect.StructField{
Name: strings.Title(v.Name),
Type: reflect.TypeOf(""),
Tag: reflect.StructTag(fmt.Sprintf(`xml:"%v,attr"`, v.Name)),
})
}
rv := reflect.New(reflect.StructOf(tableFields)) // initialize a pointer to the struct
v := rv.Interface() // get the actual value
err := xml.Unmarshal([]byte(`<configuration name="foo" isUsed="bar"/>`), v)
if err != nil {
panic(err)
}
rv = rv.Elem() // dereference the pointer
values := make([]interface{}, rv.NumField())
for i := 0; i < rv.NumField(); i++ {
values[i] = rv.Field(i).Interface()
}
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报